ac_785快速排序
题目描述
题目大意&链接
给定一个长度为n的乱序数列,用快速排序将数列排成有序数列。
输入输出样例:
输入:
5
3 1 2 4 5
输出:
1 2 3 4 5
详情:ac_785快速排序
解题思路
快速排序主要就是分治思想,将数列以枢轴x为标准,划分为两个区间(i<=x 和 j>=x),划分好后重新选取枢轴x依次递归处理其左右区间。
枢轴选取:
共有四种选取方式:左端点q[l],右端点q[r],中间索引q[l + r >> 1] 和 随机索引(这里我一般取中间索引作枢轴)int x = q[l + r >> 1], i = l - 1, j = r + 1;
调整区间:
定义i和j两个指针,i指向<=x的区间,j指向>=x的区间int x = q[l + r >> 1], i = l - 1, j = r + 1;
递归处理左右区间
quick_sort(q, l, j);
quick_sort(q, j+1 ,r);
完整代码
|
时间和空间复杂度
时间复杂度:O(nlogn)
空间复杂度:O(logn) 取决于快速排序形成的递归树调用栈的深度
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ZW_Blog!