前言:
快速排序工作原理就是先在序列中找到乙個基準值,我稱為k值。然後小於k的放在k的前面,大於k的放在k的後面。其實我們每操作k一次,就相當於把序列分為兩個部分,一部分大於k,一部分小於k,就這樣周而復始。我們可以推測出平均的時間複雜度為lgn,為啥這樣說呢。但是書本上說的為nlgn,其實他是每次都進行了一次最優值篩選,但是我沒有這樣做。我是直接選擇中間位置的值當做k值。
好了下面是**,待會兒再對**進行說明:
void fastsort(int *p, int start, int end)
else
}while (j > kpos)
else
}
} //left
fastsort(p, 0, (kpos - 1 >= 0) ? ( kpos - 1 ) : 0 );
//right
fastsort(p, (kpos + 1 <= end ) ? (kpos + 1) : end, end);
}
void fastsort(int *p, int start, int end):
*p:需要排序的數列指標
start:序列開始位置
end:序列結束位置
while (ik)
else
}
這部分作用是交換p[i]和k。交換之後,現在kpos已經等於i,所以while(i
while (j > kpos)
else
}
現在又進行另外部分交換,交換之後j--,同時kpos和j相同,所以迴圈不能進行。就這樣,交換一次進行另外一次交換。
就這樣多次迴圈之後,直到i==j之後。本次總迴圈完成。可以進行左邊右邊排序。
演算法精解(三) 歸併排序
歸併排序 o nlogn 所以歸併排序最壞情況能夠達到快速排序的平均水準 需要額外的儲存空間o n 1 對資料不斷的分割,直到剩下乙個乙個的 2 合併資料,在合併的時候,其實是兩個有序的陣列,因此 這個過程是兩個有序陣列進行合併排序 歸併排序 o nlogn 所以歸併排序最壞情況能夠達到快速排序的平...
演算法精解(三) 歸併排序
歸併排序 o nlogn 所以歸併排序最壞情況能夠達到快速排序的平均水準 需要額外的儲存空間o n 1 對資料不斷的分割,直到剩下乙個乙個的 2 合併資料,在合併的時候,其實是兩個有序的陣列,因此 這個過程是兩個有序陣列進行合併排序 歸併排序 o nlogn 所以歸併排序最壞情況能夠達到快速排序的平...
演算法精解概述
原創 演算法精解概述 摘要 本文對 演算法精解 做了簡單描述,對其中的約束和核心思想簡單介紹了一下。演算法概述 是一本比較基礎的講解演算法和資料結構的書,英文名mastering algorithms with c。對於每種資料結構和演算法,裡面都有完整的c語言實現,並沒有單純講解演算法書籍的空洞感...