//寻找与key交换的数字,返回交换的数字的位置
int partition(int a[], int p, int r)
{
int i = p;
int j = r + 1;
int x = a[p];
while(1){
//寻找比key大的数字,找到停下
while(i<r && a[++i]<x); //i<r,是因为他先走可以一直走到最后
//寻找比key小的数字
while(a[--j]>x);
//两者如果相遇甚至背向仍然没有找到
if(i>=j) break;
//找到之后交换数字
swap(a,i,j);
}
swap(a,p,i);//key与i,j相遇的位置的数字进行交换 //如果ij相邻,取后面的数字
return i;
}
//快速排序
void quicksort(int a[], int p, int r)
{
if(p<r){
//与key交换的位置
int q = partition(a,p,r);
//交换后左边进行排序
quicksort(a,p,q-1);
//交换后右边进行排序
quicksort(a,q+1,r);
}
}
int main()
{
int i;
int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};
int N = 12;
quicksort(a, 0, N-1);
for(i=0; i<N; i++) printf("%d ", a[i]);
printf("\n");
return 0;
}
蓝桥杯省赛2016_4快速排序
最新推荐文章于 2024-01-25 19:00:48 发布