快速排序~
~
程序代码:#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编辑过]










~~~