void quick_sort(int a[], int left, int right)
{
int n = left, m = right;
int key = a[n];
if (n >= m)
return ;
while (n < m)
{
//从右边往左边找比key小的
while (n < m && a[m]>key)
m--;
//如果找到了要填前面的坑
if (n < m)
a[n] = a[m];
else
break;
//从左边往右边找比key大的
while (n < m && a[n] < key)
n++;
if (n < m)
a[m] = a[n];
else
break;
}
//最后一个坑
a[n] = key;
//对key左边的部分排序
quick_sort(a, left, n-1);
//对key右边的部分排序
quick_sort(a, n+1, right);
}
void main()
{
int a[] = {8, 2, 13, 7, 5, 9, 6, 4, 11};
int key = a[0];
//将比key小的放到左边,比key大的放到右边
int n = 0, m = sizeof(a)/sizeof(a[0]) - 1;
quick_sort(a, 0, m);
int i;
for (i = 0; i < 9; i++)
printf("%d ", a[i]);
printf("\n");
}
一个快速排序的例子
最新推荐文章于 2024-07-24 22:13:06 发布