标签:
题外话: 这是我写的系列算法导论学习笔记的第一篇:插入排序。写下来是为了更好的理解它。
插入排序的原理:从第二个元素开始,通过将其与前面元素比较,将其插入正确的位置。
伪代码:
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++源代码:
#include <iostream>
using namespace std;
void insert_sort(int *a,int n){
int i,j,k;
for(j=1;j<n;j++){
k = a[j];
i = j - 1;
while(i>=0 && a[i]>k){
a[i+1] = a[i];
i--;
}
a[i+1] = k;
}
}
int main(){
int a[10]={3,1,5,2,4,7,8,6};
insert_sort(a,8);
for(int i=0;i<8;i++){
cout<<a[i]<<" ";
}
}
标签:
原文地址:http://www.cnblogs.com/heee/p/4480428.html