在剛開始學習數組時,不能很好的使用簡單的排序算法,當進行深刻學習了一段時間後,才分清楚,今天這裏簡單的分享一下使用選擇排序的算法並進行相關實例。前端
從字面意思能夠理解,就是有選擇的進行排序,那麼什麼是有選擇的呢?按照個人理解,就是按照某一種規則(例如從大到小或者從小到大)進行排序,就好像咱們去看美女,確定是先找氣質最好的,依次往下,固然按照氣質來進行選擇的話,這是一個判斷條件,是咱們的一個標準;而咱們所學習的選擇排序也是這樣。
專業解釋:
選擇排序是經過每一趟排序過程當中從待排序記錄中選擇出關鍵字最小(大)的記錄,將其依次放在數據表的最前或最後端的的方法來實現整個數據表的有序排列。算法
思路:
第一趟排序在全部的待排序的n個記錄中選出關鍵字最小的記錄,將它與數據表中的第一個記錄進行交換位置,使關鍵字最小的記錄處於數據表的最前端;
第二趟在剩下的n-1個記錄中再選出關鍵字最小的記錄,將其與數據表中的第二個記錄交換位置,使關鍵字次小的記錄處於數據表的第二個位置;
一直重複這樣的操做,最終可實現數據表的升序排列。共進行n-1趟排序。後端
思路圖片淺析:數組
1. 過程走向:函數
2. 數據舉例:學習
//選擇排序算法函數實現 void select_sort(int*arr,int len) { int i =0; int j =0; int index =0;//記錄最小記錄的位置 int min_value =0;//記錄最小值 for(i =0; i < len; i++) { min_value = arr[i]; //獲取最小值及其位置 for(index = i, j = i +1; j < len; j++) { if(min_value > arr[j]) { min_value = arr[j]; index = j; } } //交換第i個位置的數值與最小值的位置 arr[index]= arr[i]; arr[i]= min_value; } }
其他的代碼spa
//打印輸出函數 void print_arr(int*arr,int len) { int i =0; for(i =0; i < len; i++) printf("%d\t", arr[i]); printf("\n"); } int main(void) { int arr[]={12,1,34,3,56,67,23,45,13}; //獲取數組長度len int len =sizeof(arr)/sizeof(arr[0]); printf("init\n"); print_arr(arr, len); //調用排序函數 select_sort(arr, len); printf("sort later\n"); print_arr(arr, len); return0; }
運行結果:
3d