插入排序_1.直接插入排序

插入排序

插入排序的算法思想是:在一个有序的元素序列中,不断地将新元素插入到该已经有序的元素序列中的合适位置,直到所有元素都插入到合适位置则完成排序。

直接插入排序:

假设待排序的元素有n个,对应的元素分别是a1,a2,a3,a4...,因为第一个元素是有序的,所以从第二个元素开始,将a2与a1进行比较。如果a2<a1,将a2插入到a1之前,否则则说明一已经有序,不需要移动。然后将a3与a2进行比较,如果a3<a2,继续将a3与a1进行比较,如果小于a1,插入到a1之前,如果大于a1,插入到a1之后,a2之前。如果a3大于a2,则说明已经有序,不需要再移动.

实现代码(C#实现):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] a = new int[] { 45, 23, 56, 12, 97, 76, 29, 68 };//一个无序的数组,要将他从小到大排序
            for (int i = 1; i < a.Length; i++) {                             //第一个数a[0]是有序的,所以第二个数a[1]开始
                int temp = a[i];                                                   //记录下当前待比较的元素
                int j = i-1;                                                          //记录下带比较元素前一个元素的索引
                while (j > -1 && temp < a[j]) {                          //将待比较元素与前面元素进行比较
                    a[j+1] = a[j];                                              //如果待比较元素小于前面的元素,将前面元素向后移动一个位置
                    j--;
                }
                a[j+1] = temp;                                                    //找到带比较元素的合适的位置了
            }

            for (int i = 0; i < a.Length; i++) {
                Console.WriteLine(a[i]);              
            }
            Console.ReadKey();
        }
    }
}

 

直接插入排序在最好的情况下,就是所有所有元素已经有序,时间复杂度为O(n),最坏的情况下是所有元素都是逆序,时间复杂度为O(n^2).

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值