常用排序算法

来源:互联网 发布:重庆软件学校 编辑:程序博客网 时间:2024/06/05 02:13

以下排序算法默认为从小到大进行排序:

1.快速排序:

      

#include<iostream>#include<cstdlib>#include<time.h>#define M 1000using namespace std;void swap(int *a,int *b); void quacksort(int a[],int start,int end);int quack(int a[],int start,int end);int main(){int n;int a[M];cin >>n;srand((unsigned)time(NULL));for(int i=0;i<n;i++){a[i]=rand()%100;}for(int i=0;i<n;i++){cout <<a[i]<<"  ";//输出排序前的数字}cout <<endl;quacksort(a,0,n-1);for(int i=0;i<n;i++){cout <<a[i]<<"  ";}return 0;}void quacksort(int a[],int start,int end){if(start<end){int mid=quack(a,start,end);quacksort(a,start,mid-1);quacksort(a,mid+1,end);}}int quack(int a[],int start,int end){int i,j,k;j=start-1;//标记小于a[end]的数 for(i=start;i<end;i++){if(a[i]<a[end]){j++;swap(&a[j],&a[i]);}}swap(&a[j+1],&a[end]);return j+1;}void swap(int *a,int *b){int c=*a;*a=*b;*b=c;}
2.归并排序:

#include<iostream>#include<time.h>#include<cstdlib>#include<cstdio>#define   M 1000using namespace std;void merger(int a[],int start,int end);void merger_sort(int a[],int start,int temp,int end);int main(){    int n;int a[M];cin >>n;srand((unsigned)time(NULL));for(int i=0;i<n;i++){a[i]=rand()%100;}for(int i=0;i<n;i++){cout <<a[i]<<"  ";}cout <<endl;    merger(a,0,n-1);for(int i=0;i<n;i++){cout <<a[i]<<"  ";}return 0;        }    void merger(int a[],int start,int end){int temp;if(start<end){temp =(start+end)/2;merger(a,start,temp);merger(a,temp+1,end);merger_sort(a,start,temp,end);}}void merger_sort(int a[],int start,int mid,int end){int i,j,k,n1,n2;n1 =mid -start+1;n2 =end - mid;int b[M],c[M];for(i=0;i<n1;i++){b[i]=a[start+i];}for(j=0;j<n2;j++){c[j]=a[mid+1+j];}k=0,j=0;for(i=start;i<=end;i++){if(b[k]<c[j]&&k<n1||j>=n2){a[i]=b[k];k++;}else if(b[k]>=c[j]&&j<n2||k>=n1){a[i]=c[j];j++;}}}

3.堆排序:

#include<iostream>#include<cstdlib>#include<time.h>#define MAXSIZE 1000using namespace  std;void heapsort(int a[],int length);void  build_max_heap(int a[] ,int length);void max_heap(int a[],int i,int length);void swap(int *a,int *b);int main(){int array[MAXSIZE];    int n,i;    cin >>n;            //ÊäÈëÊý×鳤¶È    srand((unsigned)time(NULL));    for(i = 1;i<=n;i++){                      //ÊäÈëÊý×é        array[i]=rand()%100;    }      for(i=1;i<=n;i++){cout <<array[i]<< "  ";}cout <<endl;          heapsort(array,n);for(i=1;i<=n;i++){cout <<array[i]<< "  ";}return 0;}void heapsort(int a[],int length){int i;int temp;build_max_heap(a,length);for(i=length;i>=1;i--){swap(&a[1],&a[i]);max_heap(a,1,i-1);}}void  build_max_heap(int a[] ,int length){int i;for(i=length/2;i>=1;i--){max_heap(a,i,length);}}void max_heap(int a[],int i,int length){int max=i;int left=2*i;int right=2*i+1;int temp;if(left<=length&&a[left]>a[max])max=left;if(right<=length&&a[right]>a[max])max=right;if(max!=i){swap(&a[i],&a[max]);max_heap(a,max,length);}}void swap(int *a,int *b){int c=*a;*a=*b;*b=c;}


0 0