自我学习 - C++快排

准备杭电复试,想着把数据结构相关的算法都自己写一遍,个人记录为主,带注释。

 

代码:

#include <iostream>

using namespace std;
void quickSort(int a[], int low, int high) {
    int temp; //放枢轴的变量
    int i = low, j = high;
    if (low < high) {
        temp = a[low];  //设置枢轴

        while (i < j) {
            while (i < j && a[j] >= temp) j--; // 若a[j]大于等于枢轴则继续从后往前找

            if (i < j) { // 这时候表示已经发现a[j] < temp 则需要让a[j]的内容替换到a[i]且让i+1
                a[i] = a[j];
                ++i;
            }

            while (i < j && a[i] < temp) i++; // 若a[i]小于枢轴则继续从前往后找

            if (i < j) { // 这时候表示已经发现a[i] > temp 则需要让a[i]的内容替换到a[j]且j - 1
                a[j] = a[i];
                --j;
            }
        }

        a[i] = temp; // 将枢轴内容放入

        quickSort(a, low, i - 1); // 递归的对左侧进行快排
        quickSort(a, i + 1, high); // 递归的对右侧进行快排
    }
}

int main()
{
    int a[8] = {2, 1, 9, 3, 7, 6, 5, 99};
    quickSort(a, 0, 7);
    for (int i = 0; i < 8; ++i) {
        cout << a[i] << endl;
    }
    return 0;
}

 

输出结果:

 

"/Users/adamweng/C++ learning/cmake-build-debug/C___learning"
1
2
3
5
6
7
9
99

posted @ 2021-03-16 15:21  adamweng  阅读(123)  评论(0)    收藏  举报