题解 | #排序#

排序

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

一、快速排序

class Solution {
  public:
    void quicksort(vector<int>& arr, int l, int r) {
        if (l >= r) return;
        int i = l, j = r, mid = arr[(l + r) / 2];
        while (i <= j) {
            while (arr[i] < mid) i++;//在左半部分寻找比中间数大的数
            while (arr[j] > mid) j--;//在右半部分寻找比中间数小的数
            if (i <= j) {
                swap(arr[i], arr[j]);//若找到一组与排序目标不一致的数对则交换它们
                i++, j--;//继续找
            }
        }
        quicksort(arr, l, j);//若未到两个数的边界,则递归搜索左右区间
        quicksort(arr, i, r);
        return;
    }
    vector<int> MySort(vector<int>& arr) {
        quicksort(arr, 0, arr.size() - 1);
        return arr;
    }
};

leetcode题解

class Solution {
public:
    vector<int> sortArray(vector<int>& nums) {
        quickSort(nums, 0, nums.size()-1);
        return nums;
    }
    void quickSort(vector<int>& nums, int l, int r) {
        if (l >= r) return;
        int i = l, j = r, mid = nums[(l+r)/2];
        while (i <= j) {
            while (nums[i] < mid) i++;
            while (nums[j] > mid) j--;
            if (i <= j) {
                swap(nums[i], nums[j]);
                i++, j--;
            }
        }
        quickSort(nums, l, j);
        quickSort(nums, i, r);
        return;
    }
};

二、冒泡排序

class Solution {
public:
    vector<int> MySort(vector<int>& arr) {
        int n = arr.size();
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    swap(arr[j], arr[j + 1]);
                }
            }
        }
        return arr;
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务