#include<stdio.h>
#include<string.h>
int Quick_sort(int *arr,int begin,int end)
{
int pivot_Key;
int mid = begin + (end -begin)/2; // 计算数组的中间值
if(arr[begin] > arr[end]) // 保证左端较小
{
int temp = arr[begin];
arr[begin] = arr[end];
arr[end] = temp;
}
if(arr[mid] > arr[end]) // 保证中间较小
{
int temp = arr[mid];
arr[mid] = arr[end];
arr[end] = temp;
}
if(arr[mid] > arr[begin]) // 保证左端较小
{
int temp = arr[mid];
arr[mid] = arr[begin];
arr[begin] = temp;
}
pivot_Key = arr[begin]; // 设置哨兵
int temp = pivot_Key; // 记录
while(begin < end)
{
while(begin < end && arr[end] >= pivot_Key)
end--;
arr[begin] = arr[end]; // 直接取代
while(begin <end && arr[begin] <= pivot_Key)
begin++;
arr[end]=arr[begin]; // 直接取代
}
arr[begin]=temp; // 复位
return begin;
}
void Q_sort(int *arr,int begin, int end)
{
int pivot;
if(begin >= end)
return;
pivot = Quick_sort(arr,begin,end);
Q_sort(arr,begin,pivot-1);
Q_sort(arr,pivot+1,end);
}
int main()
{
int a[10];
for(int i = 0; i < 10; i++)
scanf("%d",&a[i]);
Q_sort(a,0,9);
for(int i = 0; i < 10; i++)
printf("%d ",a[i]);
return 0;
}
上面是快排的优化。
3199

被折叠的 条评论
为什么被折叠?



