排序系列(三)

2021-05-23 16:40:04 字數 1713 閱讀 6450

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...