#include void main();
for (i = 0; i < 6; i++)
} }for (m=0; m<6; m++)
}
以上程式正確輸出。
錯誤程式:
#include void main();
for (i = 0; i < 6; i++)
} index = a[i];
a[i] = min;
a[key] = index;
} for (m=0; m<6; m++)
}
原因分析:
在這三步中
index = a[i];
a[i] = min;
a[key] = index;
如果此次j迴圈沒有做任何動作,那麼此時的key值仍然為上乙個i迴圈中的值,這時的交換出現錯誤
例如 5 2 4 6 1 3 第乙個i迴圈後,key=4,序列變成 1 2 4 6 5 3
index = a[1] = 2;
a[1] = 2;
a[4] = 2;
此時錯誤出現,將 a[4] 原本為5的值擅自改變為2
但是程式一,交換次數太多。引入key的改進
#include void main();
for (i = 0; i < 6; i++)
}if (key > i)
} for (m=0; m<6; m++)
}
第乙個關於 i 的 for 迴圈,i < 5 就行。
應用loop invariant思想,sequence最後乙個數肯定是最大的。
as a loop invariant, we choose that a[1...i-1] are sorted and all other elements are greater then these. we only need to iterate to n-1 since according to the invariant the n-th element will be the largest.
排序 選擇排序 選擇排序 堆排序
寫在前面 上傳github交換排序選擇排序 堆排序 選擇排序 顧名思義,我們就可以猜到,它是原則合適的元素放到合適的位置 從圖中,我們可以得到 1.用第乙個元素,和其他所有的元素進行比較,找出最小的,然後進行交換 2.然後進行,資料的遞增 3.直到資料全部有序 void selectsort int...
選擇排序 直接選擇排序
演算法思想 在每一趟的排序中,從待排序列中選出關鍵字最小或者最大的元素放在其最終的位置上 過程分析 在第i趟直接排序中,通過n i次關鍵字的比較,從n i 1個元素中選出關鍵字最小的元素 與第i個元素進行交換。經過n 1趟比較,直到表有序為止 效能分析 時間複雜度o n 2 include defi...
選擇排序 直接選擇排序
直接選擇排序也成為簡單選擇排序。對於乙個待排序數列,每次從無序區選擇乙個最小的元素,放入有序區 初始時有序區為空 直到無序區元素只有乙個 即整個數列的最大值 具體操作 第i趟排序開始,數列分為有序區a 0,i 1 和無序區a i,n 1 從無序區中選擇最小元素a k 將a k 放在無序區的最左邊的位...