插入排序優化

2021-08-15 17:31:11 字數 558 閱讀 8319

插入排序的是十分常見的o(n^2)級別的排序演算法,其排序思路如下:

一次迴圈使前n個數都為有序,巢狀的二次迴圈將第n個數插入到前n個數中合適的位置,我的實現**如下:

public

void

insertsort(int a,int n)

else }}

}

這個插入排序相對於選擇排序有可以提前結束一層迴圈的特點,但是在實際實驗中,其排序速度並沒有選擇排序快。我認為主要原因使插入排序需要進行兩個數的交換操作,交換操作相對更加耗費時間。所以我下面的優化將三步的交換操作縮短為一次的賦值操作:

public

void

insertsort2(int a,int n)

else }}

}

這樣就能使得排序的速度更快,另外插入排序在所排序資料趨近於有序時,其排序的時間複雜度也逐漸趨近於o(n)。這個特性十分重要。

插入排序及其優化

插入排序 把乙個無序的陣列分為兩部分,一部分為有序 剛開始只有乙個元素 一部分為無序 從第二個元素開始 將無序元素乙個乙個插入到有序元素中。void insertsort int arr,size t size arr j x 直接插入排序耗時的操作有 比較 後移賦值。時間複雜度如下 1 最好情況 ...

插入排序及其優化

複雜度o n 2 用筆模擬過程可輕鬆得出 一 思路 index 0 1 2 3 4 5 value 4 3 2 6 4 8 1 選定起始指標index 0,此時已排好順序的子陣列長度為1 就是list 0 4 2 指標後移,候選元素變為list 1 3,將該元素不斷向左交換到某個位置,使得list ...

插入排序及其優化

插入排序 直接插入排序 時間複雜度為o n 2 穩定的排序元素移動是順序的 在乙個陣列中,將第乙個元素看作排序元素序列裡的唯一元素,然後用臨時變數tmp首先存放第二元素,即可在陣列中空第二個元素位置 即此位置可被覆蓋 將第二個元素與有序序列裡面唯一乙個元素進行比較,根據排序條件決定元素是否需要向後移...