插入排序法

来源:互联网 发布:泰国 试管婴儿 知乎 编辑:程序博客网 时间:2024/03/29 23:06

插入排序法


          插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置。


          假设:我们输入的是 “5,1,4,2,3”。

          我们从第二个数字开始,这个数字是1,我们的任务只要看看1有没有正确的位置,我们的做法是和这个数字左边的数字来比,因此我们比较1和5,1比5小,所以我们就交换1和5,原来的排列就变成了“1,5,4,2,3”

          接下来,我们看第3个数字有没有在正确的位置。这个数字是4,它的左边数字是5,4比5小,所以我们将4和5交换,排列变成了 “1,4,5,2,3"我们必须继续看4有没有在正确的位置,4的左边是1,1比4小,4就维持不动了。

          再来看第四个数字,这个数字是2,我们将2和它左边的数字相比,都比2大,所以就将2一路往左移动,一直移到2的左边是1,这时候排序变成了 “1,2,4,5,3”

          最后,我们检查第五个数字,这个数字是3,3必须往左移,一直移到3的左边是2为止,所以我们的排列就变成了 “1,2,3,4,5”排序因此完成了。

所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去。

          这里使用C#实现了一下,具体代码如下:


<span style="font-size:24px;">namespace ConsoleApplication1{    class Program    {        //定义一个泛型集合        //要求从大到小排序        static List<int> list = new List<int>() { 72, 54, 59, 30, 31, 78, 2, 77, 82, 9 };        static void Main(string[] args)        {            bubble();        }        //排序        static void bubble()        {            //总共要比较的趟数            for (int i = 1; i < list.Count; i++)            {                //定义一个变量                //用于存放位置为i的那个元素,即寻找合适位置的那个元素                int temp = list[i];                //从这个数的位置开始,依次和它的前一个数进行比较                int j = i;                //每趟中要比较的次数                //依次比较当前位置为j-1的数和temp的大小                //如果当前位置为(j-1)的数比temp小,则把它移到位置为j的地方,然后j-1                //判断j是否大于0                //如果j大于0,继续比较                //如果j小于0,结束比较                //如果当前位置为(j-1)的数比temp大,结束比较                            while ((j > 0) && (list[j - 1] < temp))                {                    list[j] = list[j - 1];                    --j;                }                //temp,应该放到位置为j的地方                list[j] = temp;                PrintList();            }            Console.ReadKey();         }        //输出        static void PrintList()        {            foreach (var item in list )            {                Console.Write(string.Format("{0} ", item));            }            Console.WriteLine();                  }           }}</span>


0 0
原创粉丝点击