【排序算法】——插入排序

第一部分  理论知识

·分类

  分为直接插入排序,二分插入排序(这般插入排序),链表插入排序,希尔排序(缩小增量排序)。属于稳定排序。所有的记录插入完为止,得到一个新的有序序列。

·内部排序和外部排序

根据排序过程中涉及的存储器不同,可以讲排序方法分为两大类:一类是内部排序,指的是待排序的几率存放在计算机随机存储器中进行的排序过程;另一类的外部排序,指的是排序中要对外存储器进行访问的排序过程。
内部排序是排序的基础,在内部排序中,根据排序过程中所依据的原则可以将它们分为5类:插入排序、交换排序、选择排序、归并排序和基数排序;根据排序过程的时间复杂度来分,可以分为三类:简单排序、先进排序、基数排序。
评价排序算法优劣的标准主要是两条:一是算法的运算量,这主要是通过记录的比较次数和移动次数来反应;另一个是执行算法所需要的附加存储单元的的多少。

·直接插入排序的算法思路

  (1) 设置监视哨r[0],将待插入纪录的值赋值给r[0];
  (2) 设置开始查找的位置j;
  (3) 在数组中进行搜索,搜索中将第j个纪录后移,直至r[0].key≥r[j].key为止;
  (4) 将r[0]插入r[j+1]的位置上。

· 排列过程

   假如有一串数字  8 9 4 6 7 3  2 1 10 5  十个数字进行直接插入法排序   


                                

  直接插入排序就是将无序区的数据,在和有序区比较之后放在其合适的位置。插入算法更像是一个正的直角三角形,是一个用有序区组成的直角三角形。


· 代码实现(c#)

class 冒泡排序  
  {  
      //定义一个数组  
      static List<int> list = new List<int>() {8,9,4 ,6, 7,3,2,1,10,5 };  
      static void Main(string[] args)  
      {  
          //调用排序方法  
          Bubble();  
          PrintList();  
      }  
      //冒泡排序  
      static void Bubble()  
      {  
          //定义临时变量  
          int temp = 0;  
          for (int i = list.Count; i > 0; i--)  
          {  
              for (int j = 0; j < i-1; j++)  
              {  
                  //相邻的两个数进行比较,把较大的数放到后面  
                  if (list[j] >list[j+1])  
                  {  
                      //交换数据  
                      temp = list[j];  
                      list[j] = list[j+1];  
                      list[j+1] = temp;  
                  }  
              }               
          }  
      }  
      private static void PrintList()  
      {  
          foreach (var item in list)  
          {  
              Console.WriteLine(string.Format("{0}", item));  
          }  
          Console.WriteLine();  
          Console.ReadLine();  
      }  
  }  

·总结

  老师讲了那么多的算法,都没有认真的去实现一遍挺愧疚。别忘了出来混,迟早要还的。看现在到了还账的时间了吧。当初没有好好学的,软考是都要考滴。要想比别人优秀,就要比别人多付出。啊哈,算法!终于遇见你~

评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值