選擇排序 演算法

2021-07-24 00:09:30 字數 1028 閱讀 2622

以陣列arr[n]為例,每一趟(假設目前為第i趟)在n-i+1(i=1,2,…n-1)個記錄中選取關鍵字最小的值作為有序序列中第i個值。基於此思想的演算法主要有簡單選擇排序、樹型選擇排序和堆排序。

簡而言之,每次排序給當前位置找最小值。

第1趟,在待排序記錄arr[1]~arr[n-1]中選出最小的記錄,將它與r[0]交換;

第2趟,在待排序記錄r[2]~r[n-1]中選出最小的記錄,將它與r[1]交換;

以此類推,第i趟在待排序記錄r[i]~r[n-1]中選出最小的記錄,將它與r[i-1]交換,使有序序列不斷增長直到全部排序完畢。

選擇排序是和氣泡排序差不多的一種排序。和氣泡排序交換相連資料不一樣的是,選擇排序只有在確定了最小的資料之後,才會發生交換。

我們可以以下面一組資料作為測試:

2, 1, 5, 4, 9

第一次排序: 1, 2, 5, 4, 9

第二次排序: 1, 2, 5, 4, 9

第三次排序: 1, 2, 4, 5, 9

第四次排序: 1, 2, 4, 5, 9

//演算法**:

#include

#include

void select_sort(int * arr, int len)

for(i =1; i < 10; i++)

}if(tmp != i-1)

}}int main()

printf("\n");

select_sort(arr, arr_len);

for(i = 0; i < 10; i++)

printf("\n");

return

0;}

從選擇排序的思想或者是上面的**中,我們都不難看出,尋找最小的元素需要乙個迴圈的過程,而排序又是需要乙個迴圈的過程。因此顯而易見,這個演算法的時間複雜度也是o(n*n)的。這就意味值在n比較小的情況下,演算法可以保證一定的速度,當n足夠大時,演算法的效率會降低。並且隨著n的增大,演算法的時間增長很快。因此使用時需要特別注意。

演算法 選擇排序,例項分析選擇排序演算法

選擇排序,將乙個序列看做兩個部分,前面有序,後面無序,每次在後面的無序序列中,選擇乙個最小的元素,交換到前面有序序列的末尾,直到無序序列全部完成交換,即可完成排序 選擇排序是不穩定的排序演算法 有乙個序列 5,2,0,1,3,1,4 第一趟排序 第二趟排序 此時我們看到,經過兩趟排序,前面兩個元素 ...

排序演算法 選擇排序

private static int leftchild int i private static void perc int a,int i,int n for int i 0 ir j break else public static void heasp int r,int n for i 0...

排序演算法 選擇排序

摘自 wiki百科 選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小元素,然後放到排序序列末尾 目前已被排序的序列 以此類推,直到所有元素均排序完畢。c語言實現 vo...