咚咚咚,開講啦!
今天呢,讓我們來看看一種快速的排序方法,哈哈,它的名字就叫做快速排序,時間複雜度 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的核心配置檔案中...