思路:从一个数组中随机选出一个数N,通过一趟排序将数组分割成三个部分,1、小于N的区域 2、等于N的区域 3、大于N的区域,然后再按照此方法对小于区的和大于区分别递归进行,从而达到整个数据变成有序数组。
---------------------------------------------------------------------------------------------------------------------------------
#include
void QS(int arr[], int l, int r)//函数部分
{
if (l >= r)
{
return;
}
int left = l, right = r;
int p = arr[left];
while (left < right)
{
while (left < right && arr[right] >= p)
{
right--;
}
if (left < right)
{
arr[left] = arr[right];
}
while (left < right && arr[left] <= p)
{
left++;
}
if (left < right)
{
arr[right] = arr[left];
}
if (left >= right)
{
arr[left] = p;
}
QS(arr, l, right - 1);
QS(arr, right + 1, r);
}
}
int main()
{
int arr[5] = { 59,1,26,99,5 };//用例
int i;
QS(arr, 0, 4);
for (i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)