您好,登錄后才能下訂單哦!
選擇排序是排序算法的一種,這里以從小到大排序為例停止解說。
選擇排序(從小到大)的根本思惟是,起首,選出最小的數,放在第一個地位;然后,選出第二小的數,放在第二個地位;以此類推,直到一切的數從小到大排序。
在完成上,我們平日是先肯定第i小的數地點的地位,然后,將其與第i個數停止交流。
下面,以對 3 2 4 1 停止選擇排序闡明排序進程,運用min_index 記載以后最小的數地點的地位。
第1輪 排序進程 (尋覓第1小的數地點的地位)
3 2 4 1(最后, min_index=1)
3 2 4 1(3 > 2, 所以min_index=2)
3 2 4 1(2 < 4, 所以 min_index=2)
3 2 4 1(2 > 1, 所以 min_index=4, 這時分肯定了第1小的數在地位4)
1 2 4 3 (第1輪后果,將3和1交流,也就是地位1和地位4交流)
第2輪 排序進程 (尋覓第2小的數地點的地位)
1 2 4 3(第1輪后果, min_index=2,只需求從地位2開端尋覓)
1 2 4 3(4 > 2, 所以min_index=2)
1 2 4 3(3 > 2, 所以 min_index=2)
1 2 4 3(第2輪后果,由于min_index地位剛好在第2個地位,無需交流)
第3輪 排序進程 (尋覓第3小的數地點的地位)
1 2 4 3(第2輪后果, min_index=3,只需求從地位2開端尋覓)
1 2 4 3(4 > 3, 所以min_index=4)
1 2 3 4(第3輪后果,將3和4交流,也就是地位4和地位3交流)
至此,排序終了。
選擇排序對巨細為N的無序數組R[N]停止排序,停止N-1輪選擇進程。第i輪拔取第i小的數,并將其放在第i個地位上。當第N-1次完成時,第N小(也就是最大)的數天然在最初的地位上。
下面給出選擇排序的C言語完成。
#include<stdio.h> #include<stdlib.h> #define N 8 void select_sort(int a[],int n); //選擇排序完成 void select_sort(int a[],int n)//n為數組a的元素個數 { //停止N-1輪選擇 for(int i=0; i<n-1; i++) { int min_index = i; //找出第i小的數地點的地位 for(int j=i+1; j<n; j++) { if(a[j] < a[min_index]) { min_index = j; } } //將第i小的數,放在第i個地位;假如剛好,就不必交流 if( i != min_index) { int temp = a[i]; a[i] = a[min_index]; a[min_index] = temp; } } } int main() { int num[N] = {89, 38, 11, 78, 96, 44, 19, 25}; select_sort(num, N); for(int i=0; i<N; i++) printf("%d ", num[i]); printf("\n"); system("pause"); return 0; }
留意:選擇排序是一種不波動的排序算法,能夠會打亂兩個相反數字的原有次序。
例如,序列 5 8 5 2 9, 依照從小到大排序,第一輪會將第1個數字5會和2交流,那么原序列中2個5的絕對前后次序就被毀壞了,所以選擇排序是一種不波動的排序算法。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。