常用排序算法(七)————快速排序

快速排序
1、挑選一個數作爲基準(這裏以最右側的數爲基準)
2、把小於基準的數,交換位置從最左側開始放。
3、然後把基準放到最左側後一位
4、排完基準左側,排基準右側

排序方法 平均情況 最好情況 最壞情況 輔助空間 穩定性
快速排序 O(nlogn) O(nlogn) O(n²) O(nlogn) ~ O(n) 不穩定

qt代碼

#include "widget.h"
#include <QApplication>
#include <QtDebug>

int array[10] = {7,1,5,8,3,9,6,0,2,4};

void printArry()
{
    QString str;
    for(int i = 0; i < sizeof(array)/sizeof(int); i++ )
    {
        str += QString::number(array[i]) + " ";
    }
    qDebug() << str;
}

void swap(int array[],int i, int j)
{
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
    printArry();
}

int partition(int array[], int left, int right)
{
    int pivot = array[right];
    int tail = left - 1;
    for(int i = left; i < right; i++)
    {
        if(array[i] <= pivot)
        {
            swap(array,++tail,i);
        }
    }
    swap(array,tail + 1,right);
    return tail + 1;
}

void quickSort(int array[], int left, int right)
{
    if(left > right)
        return;
    int j = partition(array,left,right);
    quickSort(array,left,j-1);
    quickSort(array,j+1,right);
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    int n = sizeof(array)/sizeof(int);
    quickSort(array,0,n-1);
    return a.exec();
}

輸出結果:

數據:
"7 1 5 8 3 9 6 0 2 4 "
排序過程:
"1 7 5 8 3 9 6 0 2 4 "
"1 3 5 8 7 9 6 0 2 4 "
"1 3 0 8 7 9 6 5 2 4 "
"1 3 0 2 7 9 6 5 8 4 "
"1 3 0 2 4 9 6 5 8 7 "
"1 3 0 2 4 9 6 5 8 7 "
"1 0 3 2 4 9 6 5 8 7 "
"1 0 2 3 4 9 6 5 8 7 "
"0 1 2 3 4 9 6 5 8 7 "
"0 1 2 3 4 9 6 5 8 7 "
"0 1 2 3 4 9 6 5 8 7 "
"0 1 2 3 4 6 9 5 8 7 "
"0 1 2 3 4 6 5 9 8 7 "
"0 1 2 3 4 6 5 7 8 9 "
"0 1 2 3 4 5 6 7 8 9 "
"0 1 2 3 4 5 6 7 8 9 "
"0 1 2 3 4 5 6 7 8 9 "
"0 1 2 3 4 5 6 7 8 9 "
"0 1 2 3 4 5 6 7 8 9 "

參考:http://www.cnblogs.com/eniac12/p/5329396.html#s1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章