• 排序分析之直接插入排序


    直接插入排序的思路是每次将一个新的数据插入到前面已经排好序的有序的数组中,重点是每次要找到插入的位置

    代码:

    void insertsort1(a[],n)

    {

           for(int i=1;i<n;i++)//寻找位置,有序情况下,不做改变,无序情况j的位置之后就是应该插入的位置

               for(int j=i-1;j>=0;j--)

                 if(a[j]<a[i])

                    break;

          if(j!=i-1)//如果无序,就进行插入操作,插入位置之后的数据都后移,位置不断前移,直到应该插入的位置进行插入完成排序

          {

              int temp=a[i];

              for(int k=i-1;k>j;k--)

                   a[k+1]=a[k];

             a[k+1]=temp; 

           }

    }

    对其可进行代码优化,将前移过程和搜索过程合并,比较a[i]和a[i+1]的大小如果有序则不处理如果无序,将a[i+1]插入a[0]到a[i]有序的数组中去,完成插入排序

    代码:

    void insertsort2(a[],n)

    {

         for(int i=1;i<n;i++)

        {

             if(a[i-1]>a[i])//如果无序则将a[i]插入前面有序数组中

             {

                   int temp=a[i];

                   for(int j=i-1;j>=0&&a[j]>temp;j--)从i-1的位置开始前移,直到找到应该插入的位置

                       a[j+1]=a[j];

                  a[j+1]=temp;

             }

        }

    }

    还可以通过交换的方式替换掉后移的方式,碰到无序的数字进行交换,在前面有序的数组中继续比较继续进行交换直到有序,即该数已经到达正确的位置

    void insertsort3(a[],n)

    {

           for(int i=1;i<n;i++)

           {

                if(a[i-1]>a[i])

               {

                    for(int j=i-1;j>=0&&a[j]>a[j+1];j--)

                          swap(a[j],a[j+1]);

                }

              }

    }

                            

         

  • 相关阅读:
    ToString格式大全
    C#栈的实现(数制转换)
    C# 二进制,十进制,十六进制 互转
    C#单向循环列表 解决 约瑟夫问题
    序列化和反序列化
    C#单向链表的实现
    C#实现二叉树遍历
    c#如何将一个整数转换二进制,并进行位运算
    2.ASP.NET AJAx架构客户端框架的简单实现
    1.使用XMLHttPRequest控件异步获取数据
  • 原文地址:https://www.cnblogs.com/pianruijie/p/6770482.html
Copyright © 2020-2023  润新知