以前写过的几种排序算法代码,贴上。
#include#include using namespace std; //namespace Sort{ //选择排序[0,n) void SelectSort(int n,int a[]) { for(int i=0;i a[j]) { minIndex=j; } } if(minIndex!=i) { int t=a[minIndex]; a[minIndex]=a[i]; a[i]=t; } } } //冒泡排序[0,n) void BubuleSort(int n,int a[]) { for(int i=0;i a[j+1]) { int t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } } //合并排序[left,right) void MergeSort(int *left,int *right){ int size=right-left; if(size<=1){ return; } int *mid=left+size/2; MergeSort(left,mid); MergeSort(mid,right); //开辟存储 int *p=(int *)malloc(size*sizeof(int)); int *p1=left; int *p2=mid; //合并 while(p1!=mid||p2!=right){ *p++=(p2==right||(p1!=mid&&(*p1)<(*p2)))?(*p1++):(*p2++); } p=p-size;//回到起点 p1=left; //复制结果回来 while(p1!=right){ *p1++=*p++; } //释放存储 free(p-size); } //快速排序 [left,right](这里包括了right) void quickSort2(int a[],int left,int right){ int i=left; int j=right; int p=(left+right)/2; int t; while(i =p&&a[j]>=a[p]){ j--; } if(j>p){ t=a[j]; a[j]=a[p]; a[p]=t; p=j; } } if(left p+1){ quickSort2(a,p+1,right); } } //快速排序 //以a[l]为中心元素,把a[l~r)的元素分开,返回中心元素位置 int part(int a[],int l,int r) { int i=l+1; int j=r-1; while(1) { while(a[j]>a[l]) { j--; } while(a[i]=r) { break; } } if(i >n; for(int i=0;i >a[i]; } //选择排序 //cout<<"SelectSort"<



