14 | #排序#

排序

http://www.nowcoder.com/practice/2baf799ea0594abd974d37139de27896

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     * @param arr int整型vector 待排序的数组
     * @return int整型vector
     */
    /* 快排,其他排序算法需要继续补充 */
    vector<int> MySort(vector<int>& arr) {
        quickSort(arr, 0, arr.size()-1);
        return arr;
    }

    void quickSort(vector<int>& arr, int left, int right) {
        if (left < right) {
            int mid = partSort(arr, left, right);
            quickSort(arr, left, mid - 1);
            quickSort(arr, mid + 1, right);
        }
    }

    int  partSort(vector<int>& arr, int left, int right) {
        /* 将所有小于left都划分到左边,这里取一个标记数 key */
        int key = arr[left];
        int le = left; /* 保证[left, le]的闭区间是小于key的 */
        /* 遍历扫描key之后的元素,如果小<=key,先移动le,然将其交换到le后面的一个元素 */
        for (int i = le + 1; i <= right; i++) {
            if (arr[i] <= key) {
                le++;
                swap(arr[i], arr[le]);
            }
        }
        swap(arr[le], arr[left]);
        return le;
    }
};
每日算法 文章被收录于专栏

每日算法、玩转技术、聪明理财、幸福生活!

全部评论
普通快排可能会超时,如: int quickSort(int* a, int left, int right) { int key = a[left]; while (left < right) { while (left < right && key < a[right]) { right--; } a[left] = a[right]; while (left < right && key > a[left]) { left++; } a[right] = a[left]; } a[left] = key; return left; }
1 回复 分享
发布于 2021-10-07 00:39

相关推荐

沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务