3
.選擇法:
現在我們終於可以看到一點希望:選擇法,這種方法提高了一點效能(某些情況下)這種方法類似我們人為的排序習慣:從資料中選擇最小的同第乙個值交換,在從省下的部分中選擇最小的與第二個交換,這樣往復下去。
#include
<
iostream.h
>
void
selectsort(
int*
pdata,
intcount)
}pdata[ipos]
=pdata[i];
pdata[i]
=itemp;}}
void
main()
;selectsort(data,7);
for(
inti=0
;i<7;i
++)cout
<<
data[i]
<<""
;cout
<<"/n
";}倒序(最糟情況)
第一輪:10,
9,8,
7->
(itemp=9
)10,9
,8,7
->
(itemp=8
)10,9
,8,7
->
(itemp=7
)7,9
,8,10
(交換1次)
第二輪:7,
9,8,
10->7,
9,8,
10(itemp=8
)->
(itemp=8
)7,8
,9,10
(交換1次)
第一輪:7,
8,9,
10->
(itemp=9
)7,8
,9,10
(交換0次)
迴圈次數:6次
交換次數:2次
其他:第一輪:8,
10,7,
9->
(itemp=8
)8,10
,7,9
->
(itemp=7
)8,10
,7,9
->
(itemp=7
)7,10
,8,9
(交換1次)
第二輪:7,
10,8,
9->
(itemp=8
)7,10
,8,9
->
(itemp=8
)7,8
,10,9
(交換1次)
第一輪:7,
8,10,
9->
(itemp=9
)7,8
,9,10
(交換1次)
迴圈次數:6次
交換次數:3次
遺憾的是演算法需要的迴圈次數依然是1/2
*(n-1
)*n。所以演算法複雜度為o(n
*n)。
我們來看他的交換。由於每次外層迴圈只產生一次交換(只有乙個最小值)。所以f(n)
<=
n所以我們有f(n)
=o(n)。所以,在資料較亂的時候,可以減少一定的交換次數。
來自:http://topic.csdn.net/u/20080928/14/4e7a079c-21c4-484b-ab80-3785beccd489.html
演算法系列(三) 快速排序
快速排序 終於到我們人見人愛,花見花開,鳥見鳥呆,車見車爆胎 快排的好處不用多說,平均時間的nlogn o 1 的輔助空間,一般比其他的排序演算法要快得多。當然也有些不足,首先,不穩定,所以多關鍵字排序的最後一排肯定不能用了,另外,最壞情況下則為n 2 快速排序和歸併排序一樣,都屬於分治的排序方法。...
資料結構排序系列之選擇排序(三)
選擇排序有直接選擇排序和堆排序。基本思想 每一趟在待排序的記錄中選出關鍵字最小的元素,依次存放在已排好序的序列的最後。直到所有元素都好排好序為止。演算法思想 每次從待排序的無序區中選出關鍵字最小的元素,將該元素與該無序區中的第乙個元素交換位置。初始時,從 0 n 1 選出乙個關鍵字最小的元素,與r ...
排序系列 比較排序系列之 氣泡排序
氣泡排序屬於交換排序的一種典型的交換排序。交換排序的基本思想是 兩兩比較待排序的關鍵碼,發現記錄逆置則進行交換,知道沒有逆置對位置。對於氣泡排序而言,則就是單純的兩兩進行比較,知道不能再繼續冒泡為止。我們通過 45,34,78,12,34 32,29,64 陣列為例,進行講解。i值過程 i 0j 7...