quick_sort排序
作者:
小鸡炖土豆
,
2022-05-16 15:06:51
,
所有人可见
,
阅读 242
快速排序 测试老超时 与 y总方法一致,但取值不一样
using namespace std;
const int N = 100010;
int q[N];
int partition (int q[],int l,int r)
{
int pivot = q[l];// 将表中第一个元素与其他元素比较进行比较
while (l < r)
{
while(l < r && q[r] >= pivot) -- r;
// 判断r指针所指向的值是否比 pivot 的值大,大的话 r --;
q[l] = q[r];
// 上层while循坏结束,表明 q[r] 的元素比 pivot 小,所以把 q[r]赋值 给q[l];
while (l < r && q[l] <= pivot) ++ l;
// r指针 保持不表,判断 l 指针指向的元素是否比pivot 的值小,小的话 l ++ ;
q[r] = q[l]; // 上层while循坏结束,表明 q[l] 的元素比 pivot 小,所以把 q[l]赋值 给q[r];
}
q[r] = pivot; //表示while 循坏结束 ,最后l 和 r 共同指向的位置就是空的
return l;
}
void quick_sort(int q[],int l,int r)
{
if(l < r)
{
int pivotpos = partition(q,l,r);
quick_sort(q,l,pivotpos - 1); //递归排序pivotpos左边与右边的各个元素(两个元素之间相互比较)
quick_sort(q,pivotpos + 1,r);
}
}
int main ()
{
int n;
scanf("%d",&n);
for(int i=0;i < n;i++) scanf("%d",&q[i]);
quick_sort(q,0,n-1);
for (int i=0;i<n;i++) printf("%d ",q[i]);
return 0;
}