/*快速排序*/
#include<stdio.h>
int partition(int r[], int first, int end);
void quicksort(int r[], int first, int end);
main()
{
int r[]={2,5,3,9,22,5};
int first=0, end=5;
quicksort(r,0,5);
for(int i=0; i<=5; i++)
{
printf("%d,",r[i]);
}
}
int partition(int r[], int first, int end) //划分
{
int i=first, j=end; //初始待划分区域
while(i<j) //扫描未结束
{
while(i<j && r[i]<=r[j]) j--; //右侧扫描
if(i<j)
{
int tempt=r[i]; //将较小的记录交换到前面
r[i]=r[j];
r[j]=tempt;
i++;
}
while(i<j && r[i]<=r[j]) i++; //左侧扫描
if(i<j)
{
int tempt=r[i]; //将较大的记录交换到后面
r[i]=r[j];
r[j]=tempt;
j--;
}
}
return i;
}
void quicksort(int r[], int first, int end) //快速排序
{
int pivot;
if(first<end)
{
pivot=partition(r,first,end); //划分,pivot是轴值在序列中的位置
quicksort(r,first,pivot-1); //求解子问题1,对左侧子序列进行快速排序
quicksort(r,pivot+1,end); //求解子问题2,对右侧子序列进行快速排序
}
}
快速排序
最新推荐文章于 2022-03-19 10:01:20 发布