插入排序的基本思想:
在有序数组中插入元素:例如,在数组a[0:4] = [2,4,6,8,9]中插入3,结果是a[0:5] = [2,3,4,6,8,9]。因此,从数组的最右端开始,将元素依次向右移动一位直到找到元素的插入位置为止。
template<class T>
void insert(T a[],int n, const T&x)
{
int i;
for(i=n-1;i>=0 && x<a[i];i--)
{
a[i+1] = a[i];
}
a[i+1] =x;
n++;
}
只有一个元素的数组被称为单元数组,是有序数组。对于有n个元素的数组而言,我们可以从第一个元素构成的单元数组开始,不断地进行插入操作。插入第二个元素后,得到有两个元素的有序数组,插入第三个元素之后得到有三个元素的有序数组,依此类推,直到所有的元素插入进去得到 n个元素的有序数组。
template<class T>
void insertSort(T a[],int n)
{
for(int i=1;i<n;i++)
{
insert(a,i,a[i]);
}
}
template<class T>
void insertSort(T a[],int n)
{
//将a[i]插入到a[0:i-1]中
for(int i=1;i<n;i++)
{
for(int j=i-1;j>=0&&a[i]<a[j];j--)
a[j+1] = a[j];
a[j+1] = a[i];
}
}