完整的堆排序內容;ios
其中給出了一個思路,就是對於插入排序,使用sort函數會快不少。。。這也算模擬經典排序的一種取巧方式函數
#include<iostream> #include<stdlib.h> #include<stdio.h> #include<vector> #include<algorithm> using namespace std; using std::vector; const int maxn=110; int n; int aim_quence[maxn]; int heap[maxn]; int input[maxn]; int flag=0; bool isSame(int a[],int b[]){ for(int i=1;i<=n;i++){ if(a[i]!=b[i]) return false; } return true; } void insert_sort(){ for(int i=2;i<=n;i++){ sort(input+1,input+i+1); if(flag!=0) break; if(isSame(input,aim_quence)){ flag=1; } } } void downAdujst(int low,int high){ //插入時進行向下調整 int i=low; int j=2*i; while(j<=high){ //cout<<11<<endl; if(j+1<=high&&heap[j]<heap[j+1]){ j=j+1; } if(heap[j]>heap[i]){ swap(heap[j],heap[i]); i=j; j=i*2; }else{ break; } } } void heapSort(){ for(int i=n;i>1;i--){ swap(heap[i],heap[1]); downAdujst(1,i-1); if(flag!=0) break; if(isSame(heap,aim_quence)){ flag=2; } } } void create(){ for(int i=n/2;i>=1;i--){ downAdujst(i,n); } } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&input[i]); heap[i]=input[i]; } for(int i=1;i<=n;i++){ scanf("%d",&aim_quence[i]); } insert_sort(); create(); heapSort(); if(flag==1){ printf("Insertion Sort\n"); for(int i=1;i<=n;i++){ if(i==1) printf("%d",input[i]); else printf(" %d",input[i]); } }else if(flag==2){ printf("Heap Sort\n"); for(int i=1;i<=n;i++){ if(i==1) printf("%d",heap[i]); else printf(" %d",heap[i]); } } system("pause"); return 0; }