排序問題之快速排序

2021-07-29 17:51:27 字數 1185 閱讀 5589

排序演算法有很多,最常見的是氣泡排序,但氣泡排序只是簡單的將相鄰位置的兩個元素比較並交換位置,所以時間複雜度是o(n2)。

快速排序的基本思想是先設乙個基準數x(為了方便可以選取陣列最左端的數字),比基準數小的放在基準數左邊,比基準數大的放在基準數右邊。一輪排序完成後將數字分成了左(較小的數字)右(較大的數字)兩組,在利用遞迴,分別對著左右兩組數字進行快速排序即可。

如何實現將比x大的放右邊,x小得放左邊呢?其實只要從左右兩端遍歷陣列(注意,因為基準數取的是最左邊的數字,所以先從右邊遍歷),從右端找乙個比x小的左端找乙個比x大的,然後交換位置即可。

快速排序的時間自由度是o(nlogn)。

以下是快速排序的**段,編譯環境是vs2015:

#include "stdafx.h"

#include

#include

#include

using

namespace

std;

#define size 10

void quicksort(int left, int right,int a)

}//一輪排序結束,歸位基準數

a[left] = a[i];

a[i] = temp;

cout

<< "每一輪的結果是:"

<< endl;

for (int k = 0; k < size; k++)

cout

<< endl;

quicksort(left, i - 1, a);

quicksort(i + 1, right, a);

}int main()

cout

<< "待排序陣列是:"

<< endl;

for (i = 0; i < size; i++)

cout

<< endl;

quicksort(0, size - 1, array);

cout

<< "排序好的陣列是:"

<< endl;

for (i = 0; i < size; i++)

cout

<< endl;

排序之快速排序

快速排序的在內排中起到比較重要的作用,平均時間複雜度達到o nlogn 公升序快速排序 1 int partition vector vi,int start,int end 11 vi start key 12return start 13 14void quickcore vector vi,i...

排序之快速排序

有沒有既不浪費空間又可以快一點的排序演算法呢?那就是 快速排序 啦!光聽這個名字是不是就覺得很高階呢。假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它用來做啥的了 為了方...

排序之快速排序

該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數 o nlogn 出處 includeusing namespace std void quicksort int ...