leetcode-快速排序法和冒泡排序法

冒泡排序视频讲解
快速排序视频动画演示

#include
#include
using namespace std;

// 1. quickSort(arr, 0, n-1); 注意函数调用是左闭右闭区间,所以递归调用的两次也是左闭右闭
void quickSort(std::vector<int>& arr, int low, int high) { 
    if (low < high) {
        int pivot = arr[high]; //1. 取最后一个数
        int i = low -1;
        // 2. 注意这里不是<=,因为最后一个数用来做基准了,如果有等于,则就是最后一个数和自己比了
        for (int j = low; j < high; j++) {
            if (arr[j] < pivot) {
                i++;
                std::swap(arr[i],arr[j]);
            }
        } // 3. 如果是第一轮,i=-1,for循环后i就表示小于pivot的个数,即左边的个数
        std::swap(arr[i+1], arr[high]);
        int pi = i + 1; //4. 基准值的idx
        quickSort(arr, low, pi - 1); //左闭右闭
        quickSort(arr, pi+1, high); //左闭右闭
    }
}

void bubbleSort(std::vector<int>& arr) {
    int n = arr.size();
    for (int i = 0; i < n - 1; i++) { // 1. 注意是i < n-1,比较了n-1次
        bool swaped = false;
        for (int j = 0; j < n - 1 - i; j++) { //2.  n-1再减i是因为数组的最后i个数已经排好序了,最大的数已经到最后面了
            if (arr[j + 1] < arr[j]) {
                swap(arr[j], arr[j+1]);
                swaped = true; // 3. 如果没有发生交换,说明已经排好序了
            }
        }
        if (!swaped) {
            return;
        }
    }
}

int main() {
    std::vector<int> arr = {1,10, 7, 8, 9, 0, 5};
    int n = arr.size();
    // quickSort(arr, 0, n-1);
    bubbleSort(arr);
    std::cout << "Sorted array: \n";
    for (auto n : arr) {
        cout << n << endl;
    }
    // printArray(arr);
    return 0;
}

你可能感兴趣的:(leetcode,leetcode,算法,排序算法)