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