排序二 二分查詢法優化插入排序

2022-07-27 12:15:10 字數 1505 閱讀 3917

通俗的插排是對乙個整型陣列進行公升序排序,可以看出每個元素插入到佇列中經過兩個步驟:先是挨個比較,找到自己所在的位置;然後把後面的資料全部移位,然後把元素插入。

要把資料插入,移位是必不可少了。那麼,挨個比較倒是可以優化,因為要插入的佇列已經是排序好的,我們可以使用二分法來減少比較的次數。

二分法的時間複雜度為o(log 2 n),而線性查詢的複雜度為o(n)。

在對50000個隨機數進行測試比較中,發現加了二分查詢的插排比普通的插排速度快了將近一倍!(通俗插排7888ms,優化插排4852ms)

下面是測試程式原始碼:

1 usingsystem;

2 usingsystem.collections.generic;

3 usingsystem.diagnostics;

4 usingsystem.linq;

5 usingsystem.text;

6 usingsystem.threading.tasks;

7 8 namespaceinsertsort

9 21

22 stopwatch watch = newstopwatch();

23 watch.start();

24 //insertsortcommon(arr); //通俗插排7888ms

25 insertsortoptimize(arr); //優化插排4852ms

26 watch.stop();

27 28 console.writeline(watch.elapsedmilliseconds.tostring());

29 }

30 31 /// 32 /// 通俗插排

33 ///

34 public static void insertsortcommon(int arr)

35 44 arr[j + 1] =temp;

45 }

46 }

47 48 /// 49 /// 優化插排

50 ///

51 public static void insertsortoptimize(int arr)

52 62 }

63 64 /// 65 /// 二分查詢(因為不是查詢與其相等值得位置,所以和傳統的二分查詢略有不同)

66 ///

67 public static int binsearchnum(int arr, int searchnum, int low, inthigh)

68 80 return low;//這塊的返回值需要注意,為什麼要這麼寫?

81 }

82 }

83 }

排序 插入排序法

插入排序 insertion sort 的基本思想 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排序好的序列中,直到全部記錄插入完成為止.直接插入排序 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直到i n 為止,依次將r...

排序演算法 插入排序 二分法插入排序

package 插入排序 二分法插入排序 按二分法找到合適位置插入 穩定 基本思想 二分法插入排序的思想和直接插入一樣,只是找合適的插入位置的方式不同,這裡是按二分法找到合適的位置,可以減少比較的次數。public class 二分法插入排序 system.out.println 排序前 for i...

插入排序法

插入排序原理很簡單,講一組資料分成兩組,我分別將其稱為有序組與待插入組。每次從待插入組中取出乙個元素,與有序組的元素進行比較,並找到合適的位置,將該元素插到有序組當中。就這樣,每次插入乙個元素,有序組增加,待插入組減少。直到待插入組元素個數為0。當然,插入過程中涉及到了元素的移動。為了排序方便,我們...