C++スタックソートアルゴリズムの例の詳細

2051 ワード

この例では、C++スタックソートアルゴリズムについて説明します.皆さんの参考にしてください.具体的には以下の通りです.
スタック内の要素の配列は、max-heapまたはmin-heapの2つに分けられ、前者の各ノードのkeyは子供ノードに等しいkeyより大きく、後者の各ノードのkeyは子供ノードに等しいkeyより小さい.
スタックは完全な二叉木と見なすことができるため、連続空間のarrayを使用して完全な二叉木をシミュレートすることができ、簡単な原始的な実現は以下の通りである.

#include
int heapsize=0;//          
void heapSort(int array[],int n){
 void buildHeap(int [],int);
 void exchange(int[],int,int);
 void heapify(int[],int);
 buildHeap(array,n);
 for(int i=n-1;i>=1;i--){
  exchange(array,0,i);
  heapsize--;
  heapify(array,0);
 }
}
//   
void buildHeap(int array[],int n){
 void heapify(int[],int);
 heapsize=n;
 //         ,    ,      
 for(int i=heapsize/2-1;i>=0;i--){
  heapify(array,i);
 }
}
//  
void heapify(int array[],int n){
 void exchange(int[],int,int);
 int left_child=n*2+1;
 int right_child=n*2+2;
 int largest;
 if(left_childarray[n]){
  largest = left_child;
 }
 else{
  largest = n;
 }
 if(right_childarray[largest]){
  largest=right_child;
 }
 if(largest!=n){
  exchange(array,largest,n);
  heapify(array,largest);
 }
}
void exchange(int array[],int i,int j){
 int tmp = array[i];
 array[i]=array[j];
 array[j]=tmp;
}
int main(){
  int arr[9]={3,1,6,9,8,2,4,7,5};
  heapSort(arr,9);
  for(int i=0;i<9;++i){
    std::cout<
#include
#include
int main()
{
  int arr[9]={0,1,2,3,4,8,9,3,5};
  std::vector vec(arr,arr+9);
  //0 1 2 3 4 8 9 3 5
  for(auto c:vec){
    std::cout< 
 

本稿で述べたことが皆さんのC++プログラム設計に役立つことを願っています.