【算法导论】插入排序
题外话: 这是我写的系列算法导论学习笔记的第一篇:插入排序。写下来是为了更好的理解它。
插入排序的原理:从第二个元素开始,通过将其与前面元素比较,将其插入正确的位置。
伪代码:
insert_sort(A)
for j = 2 to A.length
k = A[j]
i = j - 1
while i>=0 and A[i]>k
exchange A[i] with A[i+1]
i = i -1
A[i+1] = k
举例:
原始数据: 3,1,5,2,4,7,8,6
第一步 : 1,3,5,2,4,7,8,6 1与3交换
第二步 : 1,3,5,2,4,7,8,6 5在正确位置,不变
第三步 : 1,2,3,5,4,7,8,6 2插入到3前面
第四步 : 1,2,3,4,5,7,8,6 4插入到5前面
第五步 : 1,2,3,4,5,7,8,6 7保持不变
第六步 : 1,2,3,4,5,7,8,6 8保持不变
第七步 : 1,2,3,4,5,6,7,8 6插入到7前面,排序完成
算法复杂度分析:θ(n^2)
C++源代码:
1 #include <iostream> 2 3 using namespace std; 4 5 void insert_sort(int *a,int n){ 6 int i,j,k; 7 for(j=1;j<n;j++){ 8 k = a[j]; 9 i = j - 1; 10 while(i>=0 && a[i]>k){ 11 a[i+1] = a[i]; 12 i--; 13 } 14 a[i+1] = k; 15 } 16 } 17 18 int main(){ 19 int a[10]={3,1,5,2,4,7,8,6}; 20 insert_sort(a,8); 21 for(int i=0;i<8;i++){ 22 cout<<a[i]<<" "; 23 } 24 }
浙公网安备 33010602011771号