簡單選擇排序

2021-09-24 21:43:31 字數 1552 閱讀 8283

選擇排序呢就是從資料集中每一次選出來乙個最大/小的值,並將這個選出來的值放在開頭,然後一次次迴圈來找出剩下的資料中的最大/小值的過程;

說形象點哈,好比從盒子中往外拿球球,先拿出來第乙個球,將這個球與剩下的所有球球進行比較,若某個球球的數比當前拿出的這個球球數字大/小,則交換球球,等和剩下的所有數字比較完成,那麼當前第乙個位置的這個元素就是咱們選出來的最大/小值,然後依次類推;

和冒泡的區別呢,如下:

假如有陣列:a,b,c,d,e

冒泡的思想

相鄰元素比較,a與b比,在b與c比,在c與d比,在d與e比,從而選出來了最大/小值;

選擇的思想

先拿出來a,將a與b比,a與c比,a與d比,a與e比,選出來了最大/小值;

舉例:對陣列【 20, 40, 8, 96, 32, 12, 45, 3】排序:

第一輪,取第乙個數20,和剩下的數字比較,結果:

3,40,20,96,32,12,45,8

第二輪:取第二個數40,和剩下的數字比較,結果:

3,8,40,96,32,20,45,12

第三輪:取第三個數32,和剩下的數字比較,結果:

3,8,12,96,40,32,45,20

第四輪:取第四個數,和剩下的數字比較,結果:

3,8,12,20,96,40,45,32

第五輪:取第五個數,和剩下的數字比較,結果:

3,8,12,20,32,96,45,40

第六輪:取第六個數,和剩下的數字比較,結果:

3,8,12,20,32,40,96,45

第七輪:取第七個數,和剩下的數字比較,結果:

3,8,12,20,32,40,45,96

第八輪:只剩96了,最大的,所以最後乙個可以不用比較;

需要注意的是:

(1)因為有n個元素,只需要選n-1次就行,因為最後只剩乙個了,肯定是最大/小的值;

(2)因為取出來了第乙個數,所以要從這個資料之後的第乙個資料開始進行比較;

穩定性:

由於在選擇過程中,是將第乙個選擇的數與剩下的元素比較的方式,所以在有重複資料時,若先拿出來第乙個重複資料,並且在第二個重複資料後有小於這個值的元素,交換後則兩個重複元素的相對位置變了,是非穩定的;

冒泡呢,由於是相鄰比較,若判斷中不存在等於號,左邊的元素在與右邊的元素相等時,是永遠不會換到後邊這個元素之後的;

選擇由於每個重複元素都要進行比較,就不能保證他們的相對位置;

(冒泡連線:

void selectsort(int *array, int size)

// 選擇的元素個數,每一次拿出乙個,需要拿n-1次就行

for (int selectnumber = 0; selectnumber < size - 1; selectnumber++)

}}}

(1)需要注意的就是要從當前元素之後開始判斷

(2)時間複雜度o(n^2);

簡單選擇排序 簡單選擇排序詳解

n個記錄的檔案的直接選擇排序可經過n 1趟直接選擇排序得到有序結果 初始狀態 無序區為r 1.n 有序區為空。第1趟排序 在無序區r 1.n 中選出關鍵字最小的記錄r k 將它與無序區的第1個記錄r 1 交換,使r 1.1 和r 2.n 分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區...

選擇排序 簡單選擇排序

在要排序的一組數中,選出最小 或者最大 的乙個數與第1個位置的數交換 然後在剩下的數當中再找最小 或者最大 的與第2個位置的數交換,依次類推,直到第n 1個元素 倒數第二個數 和第n個元素 最後乙個數 比較為止。第一趟,從n個記錄中找出關鍵碼最小的記錄與第乙個記錄交換 第二趟,從第二個記錄開始的n ...

選擇排序 簡單選擇排序

1.選擇排序 簡單選擇排序,堆排序 與交換排序 氣泡排序,快速排序 的區別 每次比較如果發現較小的元素在後面,就交換兩個相鄰的元素。而選擇排序演算法的改進在於 先並不急於調換位置,先從a 1 開始逐個檢查,看哪個數最小就記下該數所在的位置p,等一躺掃瞄完畢,再把a p 和a 1 對調,這時a 1 到...