折半插入排序最難理解的地方在於:插入點位置那麼如何確定插入點的位置呢?
1)如果p[mid] > 關鍵字則執行right = mid - 1while
(left<=right)
else
}
此時位置情況:__ right mid(left) __
所以插入的位置:right後面乙個,即left
2)如果p[mid] < 關鍵字則執行:left = mid + 1
此時位置情況:__ mid(right) left __
所以插入的位置:right後面乙個,即left
#include
using
namespace std;
#define maxn 100
void
print_p
(int p,
int n)
cout<}//折半插入排序
void
insert_mid_sort
(int p,
int n)
else
}/**
if left == right == mid
(1) p[mid] > p[0]
==> right = mid - 1
此時位置情況:__ right mid(left) __
所以插入的位置:right後面乙個,即將mid(left)
(2) p[mid] < p[0]
==> left = mid + 1
此時位置情況:__ mid(right) left __
所以插入的位置:right後面乙個,即將left
**/for(
int j=i-
1;j>=left;j--
) p[left]
= p[0]
;}print_p
(p,n);}
///希爾排序
void
shell_sort
(int p,
int n)
p[j+gap]
= p[0]
;}}}
print_p
(p,n);}
intmain()
;int n =8;
//insert_mid_sort(p,n);
shell_sort
(p,n)
;}
插入排序詳解
有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為o n 2 插...
插入排序 JAVA詳解
插入排序是一種簡單的排序in place排序 即只需o 1 的額外空間排序 演算法,把陣列分為兩個子陣列,乙個是已排序好的,乙個是為排序的,從未排序的陣列中拿出元素然後在已排序陣列中從後往前掃瞄,找到相應位置 小於或者大於 並插入,在從後向前掃瞄的過程中,需要反覆把已排序元素逐步向後挪位,為新元素提...
C 插入排序詳解
演算法思路 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 已排序 大於新元素,將該元素移到下一位置 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置 將新元素插入到下一位置中 重複步驟2 5 使用插入排序為一列數字進行排序的過程 ...