排序小结(C++版)
一、快速排序
#include <iostream> using namespace std; int adjust(int a[],int start,int end) { int i,j; i=start; j=end; int temp=a[i]; while(i<j) { while(i<j&&temp<a[j]) j--; if(i<j) a[i++]=a[j]; while(i<j&&temp>=a[i]) i++; if(i<j) a[j--]=a[i]; } a[i]=temp; return i; } void quicksort(int a[],int start,int end) { if(start<end) { int m=adjust(a,start,end); quicksort(a,start,m-1); quicksort(a,m+1,end); } } void print(int a[],int n) { for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; } void main() { int a[]={5,9,3,7,1,8}; quicksort(a,0,5); print(a,6); cout<<"hello world\n"; system("pause"); }
二、堆排序
#include <iostream> using namespace std; //s表示根节点(仅s节点不满足堆) //n表示所有节点的个数 //a[0]不参与排序 void adjust(int a[],int s,int n) { int j; int temp=a[s]; for(j=2*s;j<=n;j=2*j) { if(j<n&&a[j]<a[j+1]) j++; if(temp>a[j]) break; a[s]=a[j]; s=j; } a[s]=temp; } void heapsort(int a[],int n) { int i; for(i=n/2;i>=1;i--) adjust(a,i,n); for(i=n;i>1;i--) { swap(a[1],a[i]); adjust(a,1,i-1); } } void print(int a[],int n) { for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; } void main() { int a[]={-999,5,9,3,7,1,8}; heapsort(a,6); print(a,7); system("pause"); }