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

来源:互联网 发布:alien skin x2 mac 编辑:程序博客网 时间:2024/06/05 16:03

插入排序

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

直接插入排序:

假设待排序的元素有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).

 

 

0 0
原创粉丝点击