快速排序

来源:互联网 发布:全能视频转换器软件 编辑:程序博客网 时间:2024/06/05 04:03

时间复杂度:O(nlogn)
空间复杂度:O(1)
稳定性:不稳定
基本原理:以数组的第一个数位标志,将小于标志的数放在数组前面,大小标志的数放在数组后面。操作后将一个数放在了他在排序数组中的位置,然后对前半部分和后半部分分别重复相同操作。
ps,快排对本身基本有序的数组而言效率不高,时间复杂度会接近O(n^2)

代码:

/*大学课程中各种排序算法的实现语言:C++作者:Kylin.C*/#include<iostream>#include<vector>using namespace std;//快速排序int Partion(vector<int> &arr, int beg, int end){    if (beg < 0 || end < 0 || beg >= arr.size() || end >= arr.size())        return 0;    int pirvot = arr[beg];    while (beg < end)    {        while (beg<end&&arr[end]>=pirvot)//应该加上等于不然会陷入死循环            --end;        arr[beg] = arr[end];        while (beg < end&&arr[beg] <= pirvot)//此处同上,两处必须要有一处加等于            ++beg;        arr[end] = arr[beg];    }    arr[beg] = pirvot;    return beg;}void QuickSort(vector<int> &arr, int beg, int end){    if (arr.size() == 0)        return;    if (beg < end)    {        int npos = Partion(arr, beg, end);        QuickSort(arr, beg, npos - 1);        QuickSort(arr, npos + 1, end);    }}int main(){    vector<int> arr{ 4, 2, 1, 4, 3, 8, 6, 5, 6 };    QuickSort(arr,0,arr.size()-1);    for (auto a : arr)        cout << a << " ";    cout << endl;    system("pause");    return 0;}
原创粉丝点击