C++中级算法第四天(快速排序)

大家好!今天给大家讲的是快速排序

解释:

快速排序(Quicksort)是对冒泡排序的一种改进。

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

以上就是官方的解释,就小编的理解是我们找一个数字当作参照物,然后讲数据比这个参照物小的放在序列的左边,大的放右边

代码原图于下:

#include<iostream>

using namespace std;

void print(int a[], int n) {

    for (int j = 0; j < n; j++) {
        cout << a[j] << "  ";
    }

    cout << endl;

    return;
}

void swap(int* a, int* b) {

    int tmp = *a;
    *a = *b;
    *b = tmp;

    return;
}

int partition(int a[], int low, int high) {

    //基准元素
    int k = a[low];

    //从表的两端交替地向中间扫描
    while (low < high) {

        //从high 所指位置向前搜索,至多到low+1 位置。将比基准元素小的交换到低端
        while (low < high && a[high] > k)
            --high;


        while (a[low] < k)
            ++low;

        swap(&a[low], &a[high]);
    }

    a[low] = a[high];
    a[high] = k;

    print(a, 10);

    return low;
}


void quickSort(int a[], int low, int high) {

    if (low < high) {

        //将表一分为二
        int privotLoc = partition(a, low, high);

        //递归对低子表递归排序
        quickSort(a, low, privotLoc - 1);

        //递归对高子表递归排序
        quickSort(a, privotLoc + 1, high);
    }

    return;
}

int main() {

    int a[10] = { 3,1,5,7,2,4,9,6,10,8 };
    cout << "初始值:";
    print(a, 10);

    quickSort(a, 0, 9);
    cout << "结果:";
    print(a, 10);

    return 0;
}
    原文作者:ja先生
    原文地址: https://www.jianshu.com/p/a1a64ab6fe41
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞