插入排序主要适用于少量元素的排序。假定我们按从小到大的顺序排序,每次插入的时候,新插入的元素都要跟前面已经排好序的元素进行比较,直到第一次找到比它小的元素,则将要插入的元素插入到第一个比它小的元素后面。此排序方法,可以参考斗地主抓牌,我们总是习惯抓到一张牌的时候,按大小顺序排列好,这时候,我们一般从大的一头开始比较,直到找到合适的位置就插入。
插入排序的伪算法:
INSERT_SORT(A)
for(j=1 to A.length)
{
key = A[j];//A[j]为将要插入的元素
i = j-1;//首先跟前面一个比较
while(i>=0 && A[i]>key)//跟前面的所有元素比较
{
A[i+1] = A[i];
i = i-1;
}
A[i+1] = key;
}
举例:
#include<iostream>
#include<cstdlib>
using namespace std;
void insert_sort(int a[]);//插入排序
int main()
{
int A[10];
int i;
for(i=0; i<10; i++)
{
A[i] = rand()%100; //获取随机数
}
for(i=0; i<10; i++)
{
cout<<A[i]<<"\t";
}
cout<<endl;
insert_sort(A);
for(i=0; i<10; i++)
{
cout<<A[i]<<"\t";
}
cout<<endl;
return 0;
}
void insert_sort(int a[])
{
int i,j,key;
for(j=1; j<10; j++)
{
key = a[j];
i = j-1;
while(i>=0 && a[i]>key)
{
a[i+1] = a[i];
i = i-1;
}
a[i+1] = key;
}
return;
}
此算法并不需要重新构造一个数组来存放已经排序好的部分,而是直接在原来数组的基础上操作,进行比较的时候,当发现比插入元素大的元素,则将大的元素后移一位,直到找到比它小的元素,再将插入元素插入至此。