本節用c++實現經典的折半插入排序,也是王道上總結得插入排序的第二種演算法,思路很清晰,首先將使用者輸入儲存在陣列中,然後從陣列第二個元素開始遍歷整個序列,每次將元素跟其左邊鄰居元素比較,如果出現小於其鄰居節點的情況,則用折半得思想找出其應該插入的位置,**如下。
#include #include using namespace std;
void sort(vector* a);
void sort(vector* a)
else
}for (int j = i; j > low; j--)
(*a)[low] = key;
}} return;
}int main()
//將使用者輸入儲存在inputlist容器中,目前還不知道如何將該功能打包成乙個函式方便日後呼叫
sort(&inputlist);
for (int i = 0; i < inputlist.size(); i++)
cout << inputlist[i] << " ";
}
我們很容易得看出折半得時間複雜度,最外層得for循壞n次,同時裡面while迴圈和for迴圈,logn和n,可以看出最好得情況就是n,最壞為n得平方,依然需要每個比較並移動。而且,該演算法是穩定得。 實現折半插入排序演算法
實驗題目 實現折半插入排序演算法 實驗目的 領會折半插入排序的過程和演算法設計 實驗內容 設計程式,實現折半插入排序演算法。用相關資料進行測試,並 輸出各趟的排序結果。include define max len 100 最大長度 typedef int key type 定義關鍵字型別為int t...
折半插入排序演算法
折半插入排序演算法是直接插入排序演算法的改進 插入元素的位置通過折半查詢確定。折半插入排序演算法的時間複雜程度為o n 2 空間負責程度是o 1 具體演算法如下 資料結構如下 typedef struct elemtype recordtype 陣列array 0 的位置無效,充當輔助儲存空間 vo...
折半插入排序演算法
這個演算法中最難以理解的莫過於,對於查詢演算法的理解了。因為在這種查詢演算法中,相等的情況並沒有單獨的列舉出來跳出迴圈,演算法設計者這樣設計的目的是什麼呢?原來演算法設計者的目的是找到為了找到小於等於查詢值的最大最大值,或者大於等於查詢值得最小值,以便方便的進行插入。如在本個例子中l mid l 0...