最近把学习《算法导论》加到了自己的学习计划,开篇第二章写的插入排序是基础的排序算法,其设计技术使用了增量方法,接下来歇息一下自己对插入排序的理解。
下面的代码是对一维数组进行插入排序,时间复杂度为O(n²),空间复杂度为O(1);对一维数组的插入排序,其目的是将给定的一组数字进行排序,使其按照顺序排列。我们可以从数组中的第二个数字作为插入值开始进行排序,首先比较插入值(也就是第二个数字)和其之前的数(第一个数字),插入值较小,就将第一个数字放在插入值的位置,此时第一个位置是空的,前边没有需要比较的数字,则第一个位置就是插入值的位置;之后将第三个数字作为插入值,开始新一轮的比较,一直循环比较到最后一个数字,结束。
#include<iostream>
using namespace std;
int main()
{
int key,j; //key是未进行排序的值
int a[5]={5,2,4,1,3}; //初始化整数类型的数组a
for(int i=1;i<5;i++) //开始排序
{
key=a[i];
j=i-1;
while(j>=0 && a[j]>key) //将较大的值往右边移位
{
a[j+1]=a[j];
j--;
}
a[j+1]=key; //j+1即是key值应该插入的位置
}
for(int i=0;i<5;i++) //遍历数组
{
cout<<a[i]<<",";
}
cout<<endl; //换行
return 0;
}