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