以陣列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...