快速排序的一些心得

2021-10-20 22:29:04 字數 1147 閱讀 1422

總結隨著c語言程式設計學習的不斷深入,我逐漸也發現並掌握了很多的排序演算法,從最開始的冒泡,選擇,再到後來的桶排序,快速排序等,目前使用起來都很流暢,不過個人感覺還是快排好用些(我也是後來才知道c++可以直接乙個函式排序,這也太方便了吧),故想寫一下我對快速排序的一些看法與心得。

快速排序之所以比較快,是因為相比氣泡排序,每次交換是跳躍式的。每次排序的時候設定乙個基準點,將小於等於基準點的數全部放到基準點的左邊,將大於等於基準點的數全部放到基準點的右邊。這樣在每次交換的時候就不會像氣泡排序一樣只能在相鄰的數之間進行交換,交換的距離就大得多了。因此總的比較和交換次數就少了,速度自然就提高了。當然在最壞的情況下,仍可能是相鄰的兩個數進行了交換。因此快速排序的最差時間複雜度和氣泡排序是一樣的,都是o(n2),它的平均時間複雜度為 o(nlogn)。其實快速排序是基於一種叫做「二分」的思想。

#include

int a[

101]

,n;//定義全域性變數,這兩個變數需要在子函式中使用

void

quicksort

(int left,

int right)

} a[left]

=a[i]

; a[i]

=temp;

quicksort

(left,i-1)

;//繼續處理左邊的,這裡是乙個遞迴的過程

quicksort

(i+1

,right)

;//繼續處理右邊的,這裡是乙個遞迴的過程

}int

main()

這是一種基於二分思想的演算法,所以自然是要用到二分法,每排一次序前都會設定乙個基準數,排完後會發現它左邊的數都比他小,右邊的數都比它大(這裡是按公升序來講的),這樣排起來會非常快。形象描述的話就需要借助《啊哈!演算法》裡的圖來解釋。

如下:

IOCP的一些心得

iocp的工作執行緒的個數一般設定為processors 2 2,這是綜合考慮了工作執行緒可能是等待 掛起 正在執行的狀態。如果你測試出更好的結果,以你的為標準。iocp的工作執行緒由系統排程和優化,不要去干預執行緒的排程,除非你自信能超越系統的排程。在遇到奇怪的問題時,可以嘗試減少iocp工作執行...

Qt 的一些心得

一.背景刷成黑色,前景色設為白色。方法一 paltette方式,經測試,該方法不會影響到其他控制項,推薦使用 qpalette bgpal palette bgpal.setcolor qpalette background,qcolor 0,0 0,255 qpalette background,...

C 的一些心得

一 sqlite sqlite,是一款輕型的資料庫,是遵守acid的關聯式資料庫管理系統,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式裝置中,可能只需要幾百k的記憶體就夠了。它能夠支援windows linux unix等等主流的作業系統,同時能夠跟很...