每天一演算法 (選擇排序)

2022-04-09 06:39:56 字數 1487 閱讀 8983

一、原理

在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換;然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止

二、思路

1.假設有乙個陣列為 [n個數],第一趟先選出 最小的元素 min[k],將min[k]位置 和 第乙個元素的位置 互換,此時第乙個元素就是 最小的元素 min[k];由於第一趟已經選出最小的元素,也就是第二趟中就從第二個元素比較,選出除了第乙個的最小元素min[j],然後和 第二個元素互換,此時 第二小的 元素 也排好序了,後面的也就一樣的。 

2.舉例說明:陣列 [5,3,2,8,1,4]

第一趟:選出最小元素:1,將1和5 的位置互換,即

1,3,2,8,5,4 

第二趟:除了第乙個元素,選出最小元素:2,將2和3的位置互換,即:

1,2,3,8,5,4

第三趟:除了第一二個元素,選出最小元素:3,將 3和3的位置互換,即:

1,2,3,8,5,4

第四趟:除了第一二三個元素:選出最小元素:4,將4和8的位置互換,即:

1,2,3,4,5,8

第五趟:除了第一二三四個元素:選出最小元素:5,將5和5的位置互換,即:

1,2,3,4,5,8

此時,原來的資料 已經按照從小到大的順序排列好了。

三、時間複雜度

選擇排序改進了氣泡排序,將必要的互動次數從o(n2)減少到o(n),但比較次數依然是o(n2)。選擇排序仍然為大計數量的排序提出了乙個非常大的改進,因為這些大量的記錄會在記憶體中移動,這就是使交換的時間和比較的時間比起來,交換的時間更為重要。

選擇排序和氣泡排序執行了相同的比較次數,n(n-1)/2。對於10個資料項,需要進行45次比較,但 交換的次數卻小於 10次;對於100個資料項,需要進行4500次比較,但 交換的次數卻 小於100次。n值很大時,比較的次數是主要的。所以 選擇排序 和 氣泡排序的時間複雜度都是 o(n2),但是,選擇排序 無疑更快,因為它交換的次數少,

四、**實現

1

/**2

* 排序演算法3*

@author

administrator4*/

5public

class

sort 21}

22 temp =numbers[i];

23 numbers[i] =numbers[min];

24 numbers[min] =temp;25}

2627

for(int i = 0;i)30}

3132

/**33

* 測試

34*

@param

args

35*/

36public

static

void

main(string args) ;

38selectsort(arr);39}

40 }

每天一演算法 (氣泡排序)

一 原理 比較兩個相鄰的元素,將值大的元素交換至右端。二 思路 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。重複第一趟步驟,直至全...

每天一演算法 (排序演算法總結)

一 集中排序演算法的比較 1.一般情況下幾乎不太使用氣泡排序,它過於簡單了,以至於可以毫不費力的寫出來。然而當資料量很小的時候,它會有些應用的價值。2.選擇排序雖然把交換次數降到了最低,但比較的次數仍然很大,當資料量小的時候,並且交換資料相對於比較資料更加耗時的情況下,可以應用選擇排序。3.單大多數...

每天一演算法 (插入排序)

一 原理 插入排序就是把當前待排序的元素插入到乙個已經排好序的列表裡面。對於給定的一組記錄,初始時假定第乙個記錄自成乙個有序序列,其餘記錄為無序序列。接著從第二個記錄開始,按照記錄的大小依次將當前處理的記錄插入到其之前的有序序列中,直到最後乙個記錄插到有序序列中為止。二 思路 1.在要排序的一組數中...