快速排序~
~程序代码:
#include<stdio.h> #include<stdlib.h> #include<windows.h> #define MAX 255 int R[MAX]={0}; int Partition(int i,int j); void Quick_Sort(int low,int high); int main() { int i=0; int j=0; int n=0; system("cls"); puts("Please input total element number of the sequence:"); scanf("%d",&n); if (n<=0||n>MAX) { printf("n must mort than 0 and less than %d.\n",MAX); exit(0); } puts("Please input the elements one by one:"); for (i=1;i<=n;++i) scanf("%d",&R[i]); puts("The sequence you input is:"); for (i=1;i<=n;++i) printf("%-4d",R[i]); Quick_Sort(1,n); puts("\nThe sequence after quick_sort is:"); for (i=1;i<=n;++i) printf("%-4d",R[i]); puts(""); return 0; } int Partition(int i,int j) { /*调用Partition(R,low,high)时,对R[low..high]做划分, 并返回基准记录的位置*/ int pivot=R[i]; /*用区间的第一个记录作为基准*/ while (i<j) { /*从区间两端交替向中间扫描,直至i=j为止*/ while (i<j&&R[j]>=pivot) j--; /*从右向左扫描,查找第一个关键字 小于pivot.key*/ if (i<j) R[i++]=R[j]; /*相当于交换R[i]和R[j],交换后指针加1*/ /*pivot相当于在位置j上*/ while (i<j&&R[i]<=pivot) i++; /*从左向右扫描,查找第一个关键字大于pivot.key的记录R[i]*/ /*表示找到了R[i],使R[i].key>pivot.key*/ if (i<j) R[j--]=R[i]; /*相当于交换R[i]和R[j],交换后j指针减1*/ } R[i]=pivot; /*基准记录已被最后定位*/ return i; } void Quick_Sort(int low,int high) { /*对R[low..high]快速排序*/ int pivotpos=0; /*划分后的基准记录的位置*/ if (low<high) { /*仅当区间长度大于1时才须排序*/ pivotpos=Partition(low,high); /*对R[low..high]做划分*/ Quick_Sort(low,pivotpos-1); /*对左区间递归排序*/ Quick_Sort(pivotpos+1,high); /*对右区间递归排序*/ } }
[此贴子已经被作者于2017-2-19 23:34编辑过]