1. 程式人生 > 實用技巧 >C語言成長之路45:選擇排序法(下)

C語言成長之路45:選擇排序法(下)

宣告:本筆記基於B站UP主「來自程式設計師的暴擊」的「C語言成長之路」中對應課程;


本節補充第44節課的選擇排序法,使用第二種方法去寫;

程式碼:

 1 void selectionSor2(){
 2     /*  C語言成長之路45:選擇排序法(下)  */
 3     printf("please enter 10 num to test \n");
 4     int a[10];
 5     for (int i = 0;i < 10;i++){
 6         scanf("%d",&a[i]);              //  迴圈獲取使用者輸入
 7     }
8 int kmax = 0; // 建立一個變數,用於準備儲存陣列下標 9 10 for (int i = 0;i < 10 - 1;i++){ 11 kmax = i; 12 for (int j = i + 1;j < 10;j++){ 13 if (a[kmax] < a[j]){ // 比較兩者下標所表示的值的大小,如果下標為kmax的值小於下標為j的值; 14 kmax = j; // 則記錄更大的值所對應的陣列下標
15 } 16 } 17 if (kmax != i){ // 在上面的程式碼中,已經是獲得了一個最大的值對應的下標,接下來進行一次位置的交換即可 18 int temp_num = a[i]; // 這裡只比較,並做賦值,而沒有進行記憶體的交換,記憶體的交換是非常耗費時間的 19 a[i] = a[kmax]; // 上一節課的是每一次小迴圈都進行一次記憶體的交換 20 a[kmax] = temp_num; //
本節課的程式碼大迴圈一次,交換一次記憶體,相比之下,效率會高更多 21 } 22 } 23 for (int i = 0;i < 10;i++){ 24 printf("a[%d] = %d\n",i,a[i]); 25 } 26 }