二、插入排序
1.直接插入排序
這裡我們注意,元素的選擇是從第二個元素開始!動態過程如下:
遞增的**實現:
#include
using
namespace
std;
void insertsort(int a,int len)
//若小於前乙個元素,則繼續向前走,前乙個元素後移
演算法分析:
優點:簡單,穩定。
總比較次數:
最好:n-1(有序)
最壞:(n+2)(n-1)/2(逆序有序)
總移動次數:
最好:0
最壞:(n+4)(n-1)/2
時間複雜度
最好 o(n)
最壞 o(n^2)
平均 o(n^2)
空間複雜度o(1)
穩定的排序演算法。
因為每次比較時,前面的序列均是有序的,我們在查詢時可以採用不同的查詢方案,不一定要用順序查詢,如果我們用二分查詢,則我們的排序即為:
折半插入排序:(直接附**)
#include
using
namespace
std;
void binsertsort(int a,int len)
else
}//插入
for(int j=i-1; j>=high+1; --j)
a[high+1] = soldier;
}cout
<
;int len = sizeof(a)/sizeof(int);
cout
<
資料結構 插入排序 直接插入排序
有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為o n 2 是...
插入排序 直接插入排序
直接插入排序演算法思想 將整個資料表分成左右兩個子表,其中左子表為有序表,右子表為無序表 整個排序過程就是將右子表中的元素逐個插入到左子表中,直到右子表為空,而左子表成為新的有序表。演算法過程分析 將待排序的元素存放在陣列r n 1 中,在初始狀態下,r 0 為監視哨,r 1 為有序區,r 2 r ...
插入排序 直接插入排序
一.插入排序的基本思想 將乙個記錄插入已排序好的有序表中,從而得到乙個新的記錄數加1的有序表。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。所謂的哨兵,就是即將插入的記錄。二.示例 如果碰見相等的元素,會被插到後面,所以,相等元素的前後順序沒有改變,插入排序是穩定的。三.演算法實現 public ...