傻瓜学算法系列之排序——2.插入排序

来源:互联网 发布:淘宝网李宁运动服 编辑:程序博客网 时间:2024/06/05 06:55

插入排序

1.想象桌子上有一堆扑克牌,左手中只有一张,数值是2,然后从桌子上拿起一张,数值是5,将这张扑克牌的和左手上的扑克牌进行比较,把较小的哪一个放到左边,于是左手上的扑克牌变成两张,排列从左到右分别是:2,5。

2.然后再从桌子上拿起一张牌3,此时左手上已经有两张牌并且已经排好顺序,左边的小右边的大。然后我们把刚刚拿起的第三张牌和左手上的扑克牌进行比较,从左开始,那么就是先和2比较,3>2,于是再和下一个比较,3<5,那么就把5往后移动,在2和5之间留出一个空格来放置3,停止比较,去桌子上抓下一张牌。

3.重复上一步,直到桌子上再也没有扑克牌。

假设有数组a[10]={8,4,6,3,2,1,8,5,11,25},我们把a[0]当成左手上的第一张牌,a[1]-a[9]当成是桌子上的那一堆牌:


然后开始执行插入排序,将4与8相比较,4<8 然后将8向右移动:


再把4放置到空位上:


这样就做好了第一轮排序,再执行下一轮:


6先与4比较,6>4,不满足条件再和下一个比较,8>6,满足条件,于是将8向右移动,这样就又出现一个空位:


把6填进去:


以此类推,直到所有元素都排序完成。

代码:

class Program    {        static void Main(string[] args)        {            int[] a = new int[] { 8, 4, 6, 3, 2, 1, 8, 5, 11, 25 };            Console.WriteLine("未排序之前的顺序:");            foreach (int s in a)            { Console.WriteLine("    {0}",s); }            int j, k;            for (int i=1;i<a.Length;i++)            {                for (j=0; j<i; j++)                {                    if (a[i]<a[j])                    break;                }                int temp = a[i];                for (k=i; k>j;k--)                {                    a[k] = a[k-1];                }                a[j] = temp;            }            Console.WriteLine("排序之后的顺序:");            foreach (int s in a)            { Console.WriteLine("    {0}", s); }            Console.ReadKey();        }    }
运行结果:










0 0
原创粉丝点击