快速排序

快速排序冒泡排序的一種改進(jìn)。(冒泡排序是比較相鄰的數(shù),并使小的在前大的在后)
核心思想為:每一趟排序都選取一個(gè)基準(zhǔn)數(shù),將數(shù)據(jù)通過基準(zhǔn)數(shù)分割成獨(dú)立的兩部分,左邊部分的數(shù)小于右邊部分的數(shù),且在一趟排序完成后使基準(zhǔn)數(shù)在正確的位置上。


目前有兩種選擇基準(zhǔn)數(shù)的方法。
1.標(biāo)準(zhǔn)快排:選取數(shù)組第一個(gè)數(shù)為基準(zhǔn)數(shù)。(這種方法的缺點(diǎn)在于對(duì)于基本有序的序列排序反而很慢)
2.改進(jìn)快排:選取數(shù)組中間的數(shù)為基準(zhǔn)數(shù),比普通快排要快一些。


方法一代碼如下

#include <bits/stdc++.h>
using namespace std;
int a[100005],n;

void qsort(int low, int high)
{
    if (high <= low) return;
    int i = low;
    int j = high + 1;
    //開頭的數(shù)為基準(zhǔn)數(shù)
    int key = a[low];
    while (true)
    {
        /*從左向右找比key大的值*/
        while (a[++i] < key)
        {
            if (i == high){
                break;
            }
        }
        /*從右向左找比key小的值*/
        while (a[--j] > key)
        {
            if (j == low){
                break;
            }
        }
        if (i >= j) break;
        /*交換i,j對(duì)應(yīng)的值*/
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
    //基準(zhǔn)數(shù)與j對(duì)應(yīng)值交換,因?yàn)榕c基準(zhǔn)數(shù)交換位置后在其前面,所以交換的數(shù)要比基準(zhǔn)數(shù)小,所以選j
    int temp = a[low];
    a[low] = a[j];
    a[j] = temp;
    qsort(low, j - 1);
    qsort(j + 1, high);
}

int main()
{
    cin>>n;
    int item;
    for(int i = 0 ; i < n ; i++)
    {
        cin>>item;
        a[i] = item;
    }
    qsort(0,n-1);
    for(int i = 0 ; i < n - 1 ; i++)
    {
        cout << a[i] << " ";
    }
    cout<<a[n-1]<<endl;
    return 0;
}

方法二代碼如下

void qsort(int l,int r)
{
    int mid=a[(l+r)/2];//基準(zhǔn)數(shù)
    int i=l,j=r;
    do{
        while(a[i]<mid) i++;//查找左半部分比中間數(shù)大的數(shù),到mid就停止
        while(a[j]>mid) j--;//查找右半部分比中間數(shù)小的數(shù),到mid就停止
        if(i<=j)//如果有一組不滿足排序條件(左小右大)的數(shù),這里注意要有=
        {
            swap(a[i],a[j]);
            i++;
            j--;
        }
    }while(i<=j);//這里注意要有=
    if(l<j) qsort(l,j);
    if(i<r) qsort(i,r);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容