各种排序算法

来源:互联网 发布:手机电池检测软件 编辑:程序博客网 时间:2024/05/13 05:40

1.希尔排序

希尔排序的下界和采取的序列有关系

typedef  int ElementType;void shellsort(ElementType array[],int N){int i,j,Increment;ElementType tmp;for(Increment=N/2;Increment>0;Increment/=2)for(i=Increment;i<N;i++){tmp=array[i];for(j=i;j>=Increment;j-=Increment)if(tmp<array[j-Increment])array[j]=array[j-Increment];elsebreak;array[j]=tmp;}}


2.堆排序

typedef  int ElementType;#define LeftChild(i) (2*(i)+1)void perDown(ElementType A[],int i,int N) {int child;ElementType tmp;for(tmp=A[i];LeftChild(i)<N;i=child){child=LeftChild(i);if(child!=N-1&&A[child+1]>A[child])child++;if(tmp<A[child])A[i]=A[child];elsebreak;}A[i]=tmp;}void HeadSort(ElementType A[],int N){int i,tmp;for(i=N/2;i>=0;i--)  perDown(A,i,N);for(i=N-1;i>0;i--){tmp=A[0];A[0]=A[i];A[i]=tmp;perDown(A,0,i);}}

3.插入排序

typedef  int ElementType;void InsertSort(ElementType A[],int N){int i,j, tmp;  for(i=1;i<N;i++)  {tmp=A[i];for( j=i;j>0&&A[j-1]>tmp;j--)A[j]=A[j-1];A[j]=tmp;  }}

4.快速排序

typedef  int ElementType;void QuickSort(ElementType A[],int left,int right){ if(left>=right) return ; int tmp,i,j; tmp=A[left]; i=left; j=right; while(1) { do{ i++; }while(i<=right&&A[i]<tmp); do{ j--; }while(A[j]>tmp); if(i>j)    break; tmp=A[i]; A[i]=A[j]; A[j]=tmp; }  tmp=A[left]; A[left]=A[j]; A[j]=tmp; QuickSort(A,left,j-1); QuickSort(A,j+1,right);}


0 0
原创粉丝点击