C 插入排序基本實現和效能調優

2021-10-05 07:18:57 字數 1502 閱讀 7292

參考:

插入排序跟選擇排序很像,都分為有序區和無序區。但是選擇排序是每次都從無序區中選出最小元素插入到有序區末尾,而插入排序是直接將陣列的第乙個元素作為有序區的第乙個元素,每次都拿出無序區第個一元素插入到有序區合適的位置上,直到無序區為空,排序完成。

1 將陣列分為有序區和無序區,有序區0,無序區[1,n-1];

2 取下無序區第乙個元素,儲存其值。

3有序區中元素從後往前與新元素比較,如果新元素更小,舊元素往後移。

3 重複步驟3,直到新元素大於或等於舊元素,將新元素插入該元素之後。

4 重複步驟234, n-1次,排序完成。

最好:t(n)=o(n),陣列元素正序排列

最壞:t(n)=o(n^2)陣列元素反序排列

平均:t(n)=o(n^2)

#include

#include

using

namespace std;

void

insertsort

(vector<

int>

& a)

a[j +1]

= val;

//騰出的合適的位置就是j+1對應的位置}}

//列印陣列

void

printvector

(const vector<

int>

& a)

cout << endl;

}int

main()

;insertsort

(a);

printvector

(a);

return0;

}

#include

#include

using

namespace std;

//基本實現

void

insertsort

(vector<

int>

& a)

a[j +1]

= val;

//騰出的合適的位置就是j+1對應的位置}}

//演算法優化-使用二分法找到最優插入點

void

insertsort1

(vector<

int>

&a)for

(int j = i -

1; j >= left;

--j)

a[left]

= key;

//left為新元素要插入的位置}}

//列印陣列

void

printvector

(const vector<

int>

& a)

cout << endl;

}int

main()

;insertsort1

(a);

printvector

(a);

return0;

}

C 實現插入排序

感謝morewindows的文章,造福我等學渣啊 複雜度應該也是o n 2 using system using system.collections.generic using system.linq using system.text namespace 排序 if j i 1 將待插入的a i...

插入排序 C 實現

寫給自己!插入排序演算法,其如同打牌,手裡總是已經排好續的牌,而桌面上的是未知牌,其思想是 拿起一張牌,與手中的牌從右到左 從大到小 進行比較,找到合適的位置插入即可。插入排序演算法沒有合併排序算好效率高,他隨著輸入的增大而增大。思想 對於將要插入的第j個元素,與已經排序好的0 j 1個元素從j 1...

插入排序C 實現

演算法描述 從陣列第二個元素開始向後掃瞄,將每個元素插到它前面所有元素的合適位置。下面給出整數陣列的實現,對於其他複雜型別只需實現相應的自定義比較函式即可 include include using namespace std const int num 20 void exch int s,int...