分類任務中效能度量及程式碼
阿新 • • 發佈:2021-12-05
一、什麼是選擇排序法:
對於一串數字:3、5、8、2、6、7、0、1,想要把這串陣列按照從大到小的順序排列,這時候我們可以選擇選擇排序的演算法。
首先:對於第一個位置上(進行選擇的位置)的數字,需要和後面的七個數字(進行比較的位置)進行比較,如果大於,則調換位置,第一輪,可以把最小的數字排到第一個位置上。
其次:對於第二個位置上的數字,需要和後面的六個數字進行比較,如果大於,則調換位置,第二輪,可以把次小的數字排到第二個位置上。
最後,只需要找到排在第七個位置上的數,這八個數字就從大到小拍好了。
因此我麼需要進行七輪,第一輪是把第一個位置上的數和後面進行比較,第二輪是把第二個位置上的數和後面比較,以此類推......
而每一輪比較,都會分為幾個小的比較,第一個位置先和第二個位置比,再和第三個位置比.....
通過上面的分析,我們可以發現,這個演算法需要一層迴圈巢狀,外層自然就是比較的輪數,內層是數字的位置(下標)
二、通過一個程式來理解:
//選擇排序法案例 #include <stdio.h> int main(void) { int names[8]={3,5,8,2,6,7,0,1};//對這個陣列中的元素進行排序 int dates[8]; for (int i=0;i<8;i++) { dates[i]=names[i]; } int out_i; int in_i; for (out_i=0;out_i<7;out_i++)//out_i代表的是比較的輪數,同時也是所要進行選擇的位置。 { for (in_i=out_i+1;in_i<8;in_i++)//in_i是進行比較的位置,這個位置負責和選擇的位置進行比較,這個位置最大是7 { if (dates[out_i]>dates[in_i])//因為陣列中的第一個位置是0位置。 { int agent; agent=dates[out_i]; dates[out_i]=dates[in_i]; dates[in_i]=agent; } } } printf("print the changed array :\n"); for (int n=0;n<8;n++) { printf("dates[%d]=%d\n",n,dates[n]); } printf("print the original array:\n"); for (int n=0;n<8;n++) { printf("names[%d]=%d\n",n,names[n]); } return 0; }
執行結果如下:
print the changed array :
dates[0]=0
dates[1]=1
dates[2]=2
dates[3]=3
dates[4]=5
dates[5]=6
dates[6]=7
dates[7]=8
print the original array:
names[0]=3
names[1]=5
names[2]=8
names[3]=2
names[4]=6
names[5]=7
names[6]=0
names[7]=1