簡單選擇排序法就是通過 n - i 次關鍵字間的比較,從 n - i + 1個記錄中選出關鍵字最小的記錄,並和第 i 個記錄交換。
代碼如下:
void SelectSort(SqList *L)
{
int i,j,min,k;
for(i = 0;i<(L->length-1);i++)
{
min = i; //將當前下標設置爲最小值下標
for(j = i+1;j < (L->length);j++);
{
if((L->r[min]) > (L->r[j])) //如果有小於當前最小值的關鍵字
min = j; //將次關鍵字的下標賦值給min
}
if(i != min) //若min != i ,說明找到最小值,進行交換
swap(L,i,min);
}
}
代碼應該說不難理解,針對待排序的關鍵字序列爲{9,1,5,8,3,7,4,6,2};對 i 從0循環到7,當i = 0時,L.r[i] = 9,min開始爲0,然後與 j = 2到9比較L.r[min]與L.r[j]的值,因爲j = 2時最小,所以min = 2,最終交換了L.r[0]和L.r[1]的值,這裏雖然比較了8次,但數據只交換了一次。
當 i = 1 時,L.r[i] = 9,min 開始是1,經過比較後,min = 9,交換L.r[1]和L.r[min]的值,這樣就找到了第二位置的關鍵字,之後數據的比較與交換與上面完全相同,最多完成8次交換即可完成排序工作。
簡單選擇排序的複雜度:
對於交換次數而言,當最好的時候,交換爲0次,最差的時候交換爲n - 1次。對於比較次數而言爲(n*(n - 1)/2),由於最終的排序時間是比較與jioa交換次數的總和,因此總的總的時間複雜度爲O(n*n).