直接插入排序

直接插入排序

直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。

如何简单快速理解什么是直接插入排序

直接插入的排序的思想是:

  • 一个数当作是有序的,排序的是一组数据,但是第一个数可见,后面的其他数不可见,也就是说当前只有一个数,一个数来说就是有序的,因为他是最大也是最小的
  • 突然来个一个数据,它跟第一个数据比,应该放在那里呢,这个时候就是跟第一个数比较,如果比第一个数小,说明新来的那个数应该放置在第一个有序数的前面
  • 这个时候,这两个数已经有序,位置确定下来了,然后从需要排序的那组数中,再拿出来一个数,跟排好序的那2个数比较,先从最大的那个比较,如果比最大的那个数小,先不急着确定这个数的位置是前面两个有序的中间位置,因为可能比两个有序数的第一个数还要小,
  • 也就是是说,新来的数,位置的确定需要跟之前有序的数比较,直到找合适位置后,这个合适的位置是比 这个位置前面的数比它下,后面的数比他大

代码实现

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

namespace InsertSort
{
    class Program
    {
        //插入排序
        static void Main(string[] args)
        {
            //直接插入排序
            int[] arr = new int[] { 5, 1, 7, 2, 4, 9, 3 };
            Console.WriteLine("排序之前:");
            foreach (int i in arr)
            {
                Console.Write(i.ToString() + " ");
            }
            Console.WriteLine();
            
            //基本思路是,假定第一个是有序的,从第二个开始寻找跟第一个比较,看看是否比第一个有序的值小
            //比如新来了一个值比现在的值,也就是是第一个值还小,也就是说,第一个数在这个位置不合适,需要换位置
            //数组中的操作做法就是,将第一个值得下标也就是位置,存起来,值也一样存起来,
            //存值就是腾出来一个位置,让小得那一位排在它所在得位置,然后让腾出来得做到第二个值的位置,到这里
            //在这两个数中,这两个数已经有序了,然后再拿出来一个值跟这连个有序得比较,找到合适的位置,就插入
            for(int i=1;i<arr.Length;i++)
            {
                int index = i;//记录临时下标
                int tmp = arr[index];//临时保存值
                while(index>0&&arr[index-1]>tmp)
                {
                    arr[index] = arr[index -1];//向前移动
                    index--;//向前搜索
                }
                //跳出循环说明找到了合适的位置
                arr[index] = tmp;

            }
            Console.WriteLine("排序之后的结果:");
            foreach (int i in arr)
            {
                Console.Write(i.ToString() + " ");
            }
            Console.WriteLine();
        }
    }
}

posted @ 2018-12-15 11:58  随时静听  阅读(93)  评论(0编辑  收藏  举报