版权声明:本文为博主原创文章,未经允许不得转载 https://blog.csdn.net/noipBar/article/details/84578351
插入排序:
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序。插入排序类似于打扑克时摸排的情形,每次将摸到的牌按花色和大小插入适当的位置,如下图所示:
插入排序基本思想:
每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。排序过程如下图所示
插入排序的代码实现:
#include <iostream>
using namespace std;
const int N=10;
int a[N];
void addsort(int val,int index) //插入并排序
{
if (index ==1) //第一个元素直接插入
{
a[0] =val;
return;
}
if (index ==2) //第二个元素和前一个比较
{
if (a[0]>val)
{
a[1] = a[0];
a[0] = val;
}
else
{
a[1] =val;
}
return;
}
for (int i=0;i<index;i++)
{
if (a[i]>val)
{
for (int j=index-1;j>=i;j--) //将后面的元素都往后移一位
{
a[j] =a[j-1];
}
a[i] = val;
break;
}
a[index-1] =val;
}
}
int main()
{
int m,n;
cout<<"请输入排序个数:"<<endl;
cin>>m;
for (int i=1;i<=m;i++)
{
cout<<"请输入第"<<i<<"个数:"<<endl;
cin>>n;
addsort(n,i); //边插入边排序
}
for (int i=0;i<m;i++)
{
cout<<a[i]<<endl;
}
return 0;
}
插入排序的时间复杂度:
插入排序时需要比较待插入元素的大小,选择合适的位置,并且将后面的元素进行移动,时间复杂度为O(n2).
插入排序的稳定性:
插入排序是一种稳定的排序