2 2 2 選擇排序

2021-06-21 07:39:19 字數 1117 閱讀 3815

#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 放在無序區的最左邊的位...