排序演算法中,桶排o(
n)的時間複雜度算很快的了,但是當資料很大的時候,空間複雜度很大。
那麼我們熟悉的冒泡呢?時間複雜度最壞的情況o(
n^2),空間複雜度才o(
1)。刷題時排序資料是
10^5
的時候你就會t了
所以這個時候 「
qsort
」就出來了。
假設 我們現在有
一組資料
6 1 2 7 9 3 4 5 10 8
我們將對這一組資料排序。
首先 我們應該確定乙個基準數(就是乙個參照),為了大家理解 我們就拿第乙個吧。
我們把比基準數
6大的放
6的右邊,比
6小的放
6的左邊。
類似 這樣的 :
3 1 2 5 4 6 9 7 10 8
我們可以從初始數列的兩端開始找,從右邊找乙個小於
6的數,在從右邊找乙個大於
6的數,然後交換。是不是很簡單。我們設左邊是哨兵
i 右邊是哨兵
j 然後迴圈 到
i == j
。 這時候我們的序列 就變成了
3 1 2 5 4 6 9 7 10 8
這個時候就應該是分治了。
我們剛剛得到的數列是
3 1 2 5 4 6 9 7 10 8
這時候 我們可以把
基準數左邊的數看成乙個數列 右邊的數列看成乙個數列。然後繼續我們剛剛的操作就行了。
a=[111,2,3,41,5,63]
b=a[:]
a.sort()
b.sort(reverse=true)
print(a)
print(b)
#includeusing namespace std;
int a[10];
void qsort(int left,int right)
}a[left]=a[i];
a[i]=te;
qsort(left,i-1);
qsort(j+1,right);
}int main()
qsort(0,9);
for(int i=0;i<10;i++)
cout<}
排序演算法 快排
今天聊聊排序演算法,排序演算法平時也會用到,有很多比如,冒泡,快排,選擇,歸併排序等 今天就聊一聊快速排序演算法排序演算法的乙個宗旨就是經過一趟排序,何為一趟排序呢?就是遍歷完一次陣列,陣列中的一部分資料比另外一部分的資料都要小 當然這兩部分資料內部仍然是無序的,然後我們再對這兩部分資料分別進行排序...
演算法 快速排序 經典快排 隨機快排
經典快排的思路是選取陣列的最後乙個數 x,按照問題一的思路把整個陣列劃分成小於等於 x 大於 x兩個部分,將 x 和 大於 x 部分陣列的第乙個元素交換位置。此時整個陣列劃分成小於等於 x x 大於 x三個部分,也就是這一次排序將 x 值排好位置。再分別對小於等於 x和大於 x中的陣列遞迴劃分,直到...
排序演算法 快排,歸併
從陣列中隨機選乙個數,比這個數大的放右邊,比這個數小的放左邊。快排中的乙個細節 如果乙個數等於p的時候,既可以在左邊又可以在右邊。這麼做是為了避免如果陣列中所有的數都一樣,則會造成資料的不平衡。快排的目的是能夠使得左邊和右邊的數都差不多,這樣的話時間複雜度就不會退化到o n 2 而是o n logn...