#include <iostream>
#include <stdio.h>
void dis(int* arr, int n)
{
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
void qsorts(int arr[],int left,int right)
{
unsigned int i, j;
int mid;
if (left < right)
{
mid = arr[(left + right) >> 1]; // 取中间值做基准
i = left ;
j = right;
while (1) //这个while循环是将比中间值大的全部交换到右边,比中间值小的全部放在左边
{
while (arr[j] > mid) //在右边找到比中间值小的位置
{
j--;
}
while (arr[i] < mid)//在左边找到比中间值大的位置
{
i++;
}
/*while (arr[--j] >= mid);
while (arr[++i] < mid);*/
if (i >= j)
break;
//找到后交换
int a;
a = arr[i];
arr[i] = arr[j];
arr[j] = a;
dis(arr, 11);
// SWAP(arr[i], arr[j]);
}
qsorts(arr, left, i - 1 ); //将[0,i-1]范围内的又重新执行上面步骤 这里的i可以是[0,5]
qsorts(arr, j + 1, right);// 将[j + 1, 10]范围内的又重新执行上面步骤 这里的j可以是[6, 10]
}
}
int main()
{
int arr[] = { 1, 3, 9, 7, 5, 2, 4, 6, 8, 10,0 };
qsorts(arr, 0, sizeof(arr) / sizeof(*arr) - 1);
dis(arr, sizeof(arr) / sizeof(*arr));
system("pause");
return 0;
}
c语言之快速排序代码及案例分析
最新推荐文章于 2022-03-31 10:25:17 发布