C#语法基础13_插入排序Insertion Sort Algorithm

C#语法基础13_插入排序Insertion Sort Algorithm

理解

例子(代码实现)


理解

以数组Arr[10] = {9,8,2,5,1,3,6,4}的升序排序为例帮助理解

从第二个元素开始,第i个元素(i>=2)与第i-1个元素比较交换建立彼此间的有序关系,同样的第i-1个元素和第i-2个元素比较交换建立彼此间的有序关系,直到数组的第2个元素和第一个元素进行交换,结束一轮的排序。下一轮以<上一轮开始元素的下一个元素>和<上一轮的开始元素>比较为开始。

显然的,

未排序前:{9,7,8,2,5,1,3,6,4}

第一轮,9个7比较,交换为{7,9,8,2,5,1,3,6,4}

第二轮,9和8比较,交换为{7,8,9,2,5,1,3,6,4}

​ 7和8比较,不交换

第三轮,2和9比较,交换为{7,8,2,9,5,1,3,6,4}

​ 8和2比较,交换为{7,2,8,9,5,1,3,6,4}

​ 7个2比较,交换为{2,7,8,9,5,1,3,6,4}

第四轮,9和5比较,交换为{2,7,8,5,9,1,3,6,4}

​ 8和5比较,交换为{2,7,5,8,9,1,3,6,4}

​ 7和5比较,交换为{2,5,7,8,9,1,3,6,4}

​ 2和5比较,不叫交换

。。。

。。。

。。。

经过8轮(Arr.Length-1)交换,得到升序数组{1,2,3,4,5,6,7,8,9}

例子(代码实现)

myarray = { 31, 15, 41, 28, 87, 55, 22, 46, 32 }的升序排序例子

class Program
    {
        static void Main(string[] args)
        {
            int[] myarray = { 31, 15, 41, 28, 87, 55, 22, 46, 32 };

            Console.Write("\t");
            Printmyarray(myarray, 0, -1);

            int temp;
            for (int i = 1; i <= myarray.Length-1; i++) // i = 1表示从第二个数字开始,myarray.Length-1是myarry最后一项的索引值
            {
                for (int j = i; j>=1; j--)
                {
                    if (myarray[j] < myarray[j-1])
                    {
                        temp = myarray[j-1];
                        myarray[j-1] = myarray[j];
                        myarray[j] = temp;
                    }
                }

                Printmyarray(myarray, 1, i);
            }
        }
		
    	// 打印数组内容的一个方法
        static void Printmyarray(int[] myarray, int flag, int i)
        {
            if (flag == 1)
                {
                    Console.Write("Pass {0}: ", i);
                }
            for (int k = 0; k <= myarray.Length - 1; k++)
            {
                Console.Write(myarray[k] + "  ");
            }
            Console.Write("\n");
        }
    }

运行结果:

posted on 2021-04-23 22:06  摸鱼time  阅读(91)  评论(0编辑  收藏  举报