快速排序 原來是這樣

2021-08-15 09:17:11 字數 1669 閱讀 5314

咚咚咚,開講啦!

今天呢,讓我們來看看一種快速的排序方法,哈哈,它的名字就叫做快速排序,時間複雜度 o(nlogn)

首先呢,以第乙個數(為了方便)  為基準數也可以叫參照數,隨你怎麼叫,就是拿來參照的。

比如 這樣一組亂序的數字:

(i)                         (j)

6  1  2  7  9  3  4  5  10  8

小i站在  6  上面,小j站在  8  上面;

基準數為  6,我們要把比  6  小的數字統一放在左邊,比  6  大的數字統一放在右邊,要怎麼做呢??

首先小j開始移動,遇到比  基準數(6)要小的數字,就停止移動:

(i)                  (j)     

6  1  2  7  9  3  4  5  10  8

//遵守規則:比基準數大的數放右邊,比基準數小的數放左邊 ,並且i<=j 

接下來小i開始移動,遇到比  基準數(6)要大的數字,就停止移動:

(i)         (j)     

6  1  2  7  9  3  4  5  10  8    

接下來:他們兩個進行了不為人知的交易(交換數字)

(i)         (j)     

6  1  2  5  9  3  4  7  10  8

然後又重複上面的環節:

小j開始移動,遇到比  基準數(6)要小的數字,就停止移動:

(i)      (j)     

6  1  2  5  9  3  4  7  10  8

小i開始移動,遇到比  基準數(6)要大的數字,就停止移動:    

(i)   (j)      

6  1  2  5  9  3  4  7  10  8

然後他們又進行了一次交易:

(i)   (j)     

6  1  2  5  4  3  9  7  10  8

然後小j又開始移動,然後停止,小i也一樣,可是一想他們在站在數字3的時候他們相遇了!!!

也就是說右邊的數字都比6要大了,小i的地盤是左邊,小j的地盤在右邊,相遇的地方就是邊界,或者小i越過邊界,超過了j,他們就不能進行交易了

(ij)     

6  1  2  5  4  3  9  7  10  8

將 3 與基準數(6)交換

3  1  2  5  4  6  9  7  10  8

後面分兩撥

3  1  2  5  4  和   9  7  10  8按照上述方法繼續交易(遞迴),總之,小i和小j的地盤在不斷的縮小,接著這兩撥分別又分兩撥,直到

把原來的陣列意義排序好,成為  1  2  3  4  5  6  7  8  9  10 大功告成!

弄懂了這些 就一步步地看**吧  ~o(∩_∩)o~  

(c語言版)

#include

int n,a[1006];

void quicksort(int left,int right)   

}a[left]=a[i];

a[i]=item;

quicksort(left,i-1);

quicksort(i+1,right);

return;

}int main()

return 0;

for迴圈原來是這樣

for迴圈可以說是程式中最靈活,最常用,最重要的乙個迴圈用法,大家經常用到,但是你真正理解for迴圈的執行原理嗎?舉個例子 for i 0 i 8 i 對於這個語句執行結束的時候 i 是多少?經常用,卻沒怎麼注意,執行結束的時候 i 是8 下面說一下for迴圈語句的執行過程 for 表示式1 表示式...

Python列表原來是這樣的!

列表 列表是python中最基本也是最常用的資料結構之一。列表中的每個元素都被分配乙個數字作為索引,用來表示該元素在列表內所排在的位置。第乙個元素的索引是0,第二個索引是1,依此類推。python的列表是乙個有序可重複的元素集合,可巢狀 迭代 修改 分片 追加 刪除,成員判斷。從資料結構角度看,py...

MyBatis原來是這樣的 04

關於介面的理解 乙個體有可能有多個抽象面。抽象體與抽象面是有區別的。三個面向區別 1 我們在我們的介面中新增註解 查詢全部使用者 select select id,name,pwd password from user public listgetalluser 2 在mybatis的核心配置檔案中...