信息学奥赛系列教程:插入排序

版权声明:本文为博主原创文章,未经允许不得转载 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).

插入排序的稳定性:

   插入排序是一种稳定的排序

猜你喜欢

转载自blog.csdn.net/noipBar/article/details/84578351