學習插入排序有感

2021-08-14 18:01:11 字數 675 閱讀 9035

最近在學資料結構與演算法設計,裡面插入排序讓我想了一下

演算法思想:(假設排成遞增序列)

一開始把第乙個元素看作有序的,然後從這個元素的後乙個元素開始依次往前比較,遇到了比它大的則交換,直到遇到了比它小的或者已經移動到了整個序列的第乙個位置為止。

**如下

void inssort(int arr,int n)

for(int i=1;i

}其實整個演算法思想和**都很好懂,然後我想著能不能改一下,讓i=0開始呢。現在i=1說明前面下標為0~i-1的元素都已經是有序的了,下標為i的正是我們要插入的元素。

一開始我覺得只需要簡單的修改一下,i=0,然後j=i+1即可,但是我發現了一點小問題。

i=n-1的時候,按照我們的思路,就是說其實整個序列都已經有序了,已經無需再排列了。而且有乙個陣列下標溢位的問題,因為arr[j]即arr[i+1]即arr[n]是超出了我們傳入的陣列的大小的。

解決的方法可以在內部迴圈裡面加乙個判斷語句,判斷j=i+1是不是小於n,但其實這也是有風險的在我看來。

更加保險的改法是在外部迴圈,i這個小思考我覺得挺有趣的,就是把一些演算法改一下我們會發現,其實前人已經考慮很多了,我們如果要改變的話其實不僅要考慮整個演算法在思路和具體實現上可不可行,還特別需要考慮一些邊界情況。在這裡選擇排序還算是好分析,因為其實**實現不困難,但是在後面的一些經典排序演算法則會有所難度了。

插入排序 學習

直接插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。二舉例有序 無序 第一趟 27 65 59 64 58 第二趟 27 59 65 64 58 第三趟 27 59 64 65 58 第四...

插入排序 折半插入排序

折半插入排序 binary insertion sort 直接插入排序採用順序查詢法查詢當前記錄在已排好序的序列中插入位置,這個 查詢 操作可利用 折半查詢 來實 現,由此進行的插入排序稱之為折半插入排序 binary insertion sort 演算法思想 1 將待排序的記錄存放在陣列r 1.n...

插入排序 折半插入排序

折半插入排序是基於直接插入排序的優化。直接插入排序 將第i個元素插入時,通過折半查詢的方式,來查詢第i個元素合適的位置。當0 i 1 位置上的元素都已經排序ok,現需要插入第i個元素,設其值為temp 令low 0,high i,mid high low 2。那麼temp可能插入的位置是 low h...