国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java實現直接插入排序和折半插入排序算法示例

2019-11-26 14:25:40
字體:
來源:轉載
供稿:網友

直接插入排序​
1 排序思想:

將待排序的記錄Ri插入到已經排好序的記錄R1,R2,……,R(N-1)中。

對于一個隨機序列而言,就是從第二個元素開始,依次將這個元素插入到它之前的元素中的相應位置。它之前的元素已經排好序。

第1次排序:將第2個元素插入到前邊的有序列表(此時前邊只有一個元素,當然是有序的),之后,這個序列的前2個元素就是有序的了。
第2次排序:將第3個元素插入到前邊長度為2的有序列表,使得前2個元素是有序的。
以此類推,直到將第N個元素插入到前面長度為(N-1)的有序列表中。

2 算法實現:

// 直接插入排序void straight_insert_sort(int num[], int len){ int i,j,key; for(j=1;j<len;j++){  key=num[j];  i=j-1;  while(i>=0&&num[i]>key){   num[i+1]=num[i];   i--;  }  num[i+1]=key; }}

3 性能分析:

3.1 空間復雜度:如上代碼,使用了一個輔助單元key,空間復雜度為O(1)

3.2 時間復雜度:

3.2.1 最好情況:待排序記錄已經是有序的,則一趟排序,關鍵字比較1次,記錄移動2次。則整個過程

比較次數為

201642392631559.gif (92×62)

記錄移動次數為

201642392724089.gif (99×62)

時間復雜度O(n)

3.2.2 最壞情況:待排序記錄已經是逆序的,則一趟排序,關鍵字比較次數i次(從i-1到0),記錄移動(i+2)次。整個過程

比較次數為

201642392744849.gif (95×62)

記錄移動次數為

201642392801121.gif (165×62)

時間復雜度O(n^2)

3.2.3 平均時間復雜度:O(n^2)

3.3 穩定性:穩定

折半插入排序
1 排序思想:

直接排序的基礎上,將待排序的記錄Ri插入到已經排好序的記錄R1,R2,……,R(N-1)中,由于記錄R1,R2,……,R(N-1)已經排好序,所以在查找插入位置時可采用“折半查找”。

2 算法實現:

// 折半插入排序void binary_insert_sort(int num[], int len){ int i,j,key,low,high,mid; for(i=1;i<len;i++){  key=num[i];  low=0;  high=i-1;  mid=(low+high)/2;  // 尋找插入點,最終插入點在low  while(low<=high){   if(key<num[mid])    high=mid-1;   else     low=mid+1;   mid=(low+high)/2;  }  // 移動記錄  for(j=i;j>low;j--){   num[j]=num[j-1];  }  // 插入記錄  num[low]=key; }}

3 性能分析:

3.1 空間復雜度:如上代碼,使用了一個輔助單元key,空間復雜度為O(1)

3.2 時間復雜度:雖然折半查找減少了記錄比較次數,但沒有減少移動次數,因此時間復雜度同直接查找算法。

3.2.1 最好情況:時間復雜度O(n)

3.2.2 最壞情況:時間復雜度O(n^2)

3.2.3 平均時間復雜度:O(n^2)

3.3 穩定性:穩定

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黑山县| 咸宁市| 奉新县| 连江县| 汶川县| 封开县| 东辽县| 榆中县| 林州市| 凤山市| 唐海县| 昌黎县| 丹阳市| 三门峡市| 收藏| 娱乐| 策勒县| 社旗县| 玉龙| 石林| 德州市| 青浦区| 芜湖县| 革吉县| 灯塔市| 兰溪市| 宁城县| 阳高县| 饶河县| 建始县| 横山县| 额敏县| 萨迦县| 岑巩县| 留坝县| 青田县| 平江县| 玛纳斯县| 榆树市| 大冶市| 巢湖市|