排序演算法之插入排序
阿新 • • 發佈:2019-01-08
插入排序
直接插入排序(Straight Insertion Sort)的基本思想是:把n個待排序的元素看成為一個有序表和一個無序表。開始時有序表中只包含1個元素,無序表中包含有n-1個元素,排序過程中每次從無序表中取出第一個元素,將它插入到有序表中的適當位置,使之成為新的有序表,重複n-1次可完成排序過程。
圖解例項:
程式碼實現:
//如果不使用len = getarraylength(arr); 執行結果失敗,應該會輸出整個陣列,但是隻輸出了第一個值 #include <iostream> using namespace std; int arr[10] = {5, 62, 8, 34, 92, 15, 45, 42, 78, 68}; //這裡使用模板的意義在於增加程式碼的泛化性,真實刷題可以不用模板,求陣列長度直接int len = sizeof(arr)/sizeof(arr[0]); template<class T> int getarraylength(T& arr) { return (sizeof(arr)/sizeof(arr[0])); } int len = getarraylength(arr); //將陣列打印出來 void print(int arr[]) { for(int i = 0; i < len; i++) { cout << arr[i] << endl; } } void insertsort(int arr[]) { //這裡如果直接使用getarraylength(arr)時會出錯,用len來代替就不會出錯,目前還沒能解決這個問題 for(int i = 1; i < len; i++) { int temp = arr[i]; //找到一個數temp, 新增到他前面的已經排序好的陣列中相應位置 for(int j = i-1; j >= 0; j--) { if(arr[j] < temp && arr[j+1] > temp) { //陣列一部分移動 for(int k = i; k > j+1; k--) { arr[k] = arr[k-1]; } //將temp插入到他應有的地方 arr[j+1] = temp; } } } //print(arr); } int main() { insertsort(arr); cout << getarraylength(arr) << endl; cout << len << endl; print(arr); return 0; }