简单的插入排序

直接插入排序的基本思想:将待排序数组分为两部分:已排好序部分和未排序部分。其主要步骤为:
开始时,第一个元素在已排好序部分中,其余部分在未排序部分。然后依次从
插入排序的具体做法:在插入第i个记录时,k1,k2,k3,...,ki-1,已经排好序,将关键字ki依次与ki-1,ki-2,...,k2,k1
进行比较,从而找到应该插入的位置,然后将ki 插入,插入位置及其后的记录依次后移动。
 
插入排序和打扑克牌时,抓牌整理牌很相似。再抓第一张牌时,不需要进行任何整理牌的动作只需抓在手上即可,抓第二张牌时需要和第一张牌比大小。大的话直接放在第一张牌后面,小的话需插到第一张牌前面。后面抓牌时依次与前面排好序的牌比较找到合适的位置插入即可。
 

插入排序的基本操作为:将一个数据插入已经排好序的有序数据中。从而得到一个新的,个数加一的有序数据,算法适用于少量的数据的排序,时间复杂度为O(n^2)是稳定的排序方法

如果待排序的序列基本有序宜采用直接插入排序和冒泡排序

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;

void insert_sort(int a[],int len)

{

    /*n个元素需要进行n-1趟插入排序 第一个元素a[0]相当于已经排好序的一个元素(抓第一张牌时是不需要做插入操作的),插入操作从第二个元素a[1]开始*/
    for(int i=1 ;i<len;i++)
	{
		if(a[i]<a[i-1])//a[i]相当与新抓的一张牌需要和前一张排好序的最大的牌a[i-1]比较大小  如果新抓的牌a[i]比排好序中最大的牌a[i-1]还大,则不用进行插入操作,直接抓下一张牌
		{
		    int temp=a[i];//相当与挖了个坑,腾出一个位置可以让a[i-1]移到这个位置
			int j;
			for( j=i-1;j>=0&&a[j]>temp;j--)//从后往前找合适的插入位置,找出第一个4比temp小的位置时结束for循环
			{
			     a[j+1]=a[j];
			}
			a[j+1]=temp;//找到了合适的位置将新抓的牌temp 插入进去完成一趟插入排序.其实插入排序有点像快速排序中挖坑填数
		}
		

	}

}

int main()
{
   int a[10];
   cout<<"输入10个整数"<<endl;
   for(int i=0;i<10;i++)
   {
      cin>>a[i];
   }
   insert_sort(a,10);
   for(int i=0;i<10;i++)
   {
      cout<<a[i]<<" ,";
   }
   cout<<endl;
   
   return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值