初学数据结构之排序

来源:互联网 发布:淘宝怎么拉黑买家 编辑:程序博客网 时间:2024/06/06 16:45

还在学习。学完再加



插入排序



void Insertion_Sort(int A[],int N){int p,Tmp,i;for(p=1;p<N;p++){Tmp=A[p];for(i=p;i>0 && A[i-1]>Tmp;i--)A[i]=A[i-1];A[i]=Tmp;}}




冒泡排序

void Bubble_Sort(int A[],int N){int i,p,flag,t;for(p=N-1;p>=0;p--){flag=0;for(i=0;i<p;i++){if(A[i]>A[i+1]){t=A[i];A[i]=A[i+1];A[i+1]=t;flag=1;}}if(flag==0)break;}}




原始希尔排序


void Shell_Sort(int A[],int N){int D,p,Tmp,i;for(D=N/2;D>0;D/=2){for(p=D;p<N;p++){Tmp=A[p];for(i=p;i>=D && A[i-D]>Tmp;i-=D)A[i]=A[i-D];A[i]=Tmp;}}}



希尔排序+Hibbard or Sedgewick


int Hibbard[6]={0,1,3,7,15,31}; //2^k-1int Sedgewick[6]={0,1,5,19,41,109}; //9*4^i-9*2^i+1 or 4^i-3*2^i+1 void Shell_Sort(int A[],int N){int D,p,Tmp,i,k;for(k=6;k>0;k--) //{D=Hibbard[k];//for(p=D;p<N;p++){Tmp=A[p];for(i=p;i>=D && A[i-D]>Tmp;i-=D)A[i]=A[i-D];A[i]=Tmp;}}}




归并排序


void Merge(int A[],int TmpA[],int L,int R,int RightEnd){int LeftEnd=R-1,NumElements=RightEnd-L+1,i;int Tmp=L;while(L<=LeftEnd && R<=RightEnd){if(A[L]<=A[R])TmpA[Tmp++]=A[L++];elseTmpA[Tmp++]=A[R++];}while(L<=LeftEnd)TmpA[Tmp++]=A[L++];while(R<=RightEnd)TmpA[Tmp++]=A[R++];for(i=0;i<NumElements;i++,RightEnd--)A[RightEnd]=TmpA[RightEnd];}void MSort(int A[],int TmpA[],int L,int RightEnd){int Center;if(L<RightEnd){Center=(L+RightEnd)/2;MSort(A,TmpA,L,Center);MSort(A,TmpA,Center+1,RightEnd);Merge(A,TmpA,L,Center+1,RightEnd);}}int Merge_Sort(int A[],int N){int *TmpA=new int[N];if(TmpA!=NULL){MSort(A,TmpA,0,N-1);free(TmpA);}else{printf("空间不足");return 0;}}




快速排序+插入排序
 
int Cutoff=100;void Insertion_Sort(int A[],int N){int p,Tmp,i;for(p=1;p<N;p++){Tmp=A[p];for(i=p;i>0 && A[i-1]>Tmp;i--)A[i]=A[i-1];A[i]=Tmp;}}void Swap(int *a,int *b){int t;t=*a;*a=*b;*b=t;}int Median3(int A[],int Left,int Right){int Center=(Left+Right)/2;if(A[Left]>A[Center])Swap(&A[Left],&A[Center]);if(A[Left]>A[Right])Swap(&A[Left],&A[Right]);if(A[Center]>A[Right])Swap(&A[Center],&A[Right]);Swap(&A[Center],&A[Right-1]);return A[Right-1];} int Quicksort(int A[],int Left,int Right){if(Right==0)//防止数组越界 return 0;if(Cutoff<=Right-Left){int i,j,Pivot;Pivot=Median3(A,Left,Right);i=Left;j=Right-1;for(;;){while(A[++i]<Pivot){}while(A[--j]>Pivot){}if(i<j)Swap(&A[i],&A[j]);elsebreak;}Swap(&A[i],&A[Right-1]);Quicksort(A,Left,i-1);Quicksort(A,i+1,Right);} elseInsertion_Sort(A+Left,Right-Left+1);}void Quick_Sort(int A[],int N){Quicksort(A,0,N-1);      }



0 0
原创粉丝点击