C語言成長之路45:選擇排序法(下)
阿新 • • 發佈:2020-08-08
宣告:本筆記基於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 }