A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马毅 中级黑马   /  2012-12-15 19:01  /  1567 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

插入排序是假设一一个数组中的前一段(或者后一段)已经排好序,而将剩下的元素分别插入到合适的位置上,以达到排序目的的一种算法
以下是实现代码,对红色部分有不同的实现方法:
  1.         /// <summary>
  2.         /// 插入排序
  3.         /// </summary>
  4.         /// <param name="arr">要排序的数组</param>
  5.         static void InsertSort1( ref int[] arr)
  6.         {
  7.             int keyValue = 0;
  8.             int pos = 0;
  9.             for (int key = 1; key < arr.Length;key++ )
  10.             {
  11.                 keyValue = arr[key];
  12.                 pos = key - 1;
  13.                                while (pos >= 0 && arr[pos] > keyValue)
  14.                 {
  15.                     arr[pos + 1] = arr[pos];
  16.                     pos--;  
  17.                 }
  18.                 arr[pos + 1] = keyValue;
  19.             }

  20.         }
  21.         /// <summary>
  22.         /// 插入排序
  23.         /// </summary>
  24.         /// <param name="arr">要排序的数组</param>
  25.         static void InsertSort2(ref int[] arr)
  26.         {
  27.             int key;
  28.             for (int i = 1; i < arr.Length;i++ )
  29.             {
  30.                 key = i - 1;
  31.                 while(key >=0 && arr[key] > arr[key+1])
  32.                 {
  33.                     Swap(ref arr[key], ref arr[key + 1]);
  34.                     key --;
  35.                 }
  36.             }
  37.         }
  38.         /// <summary>
  39.         /// 交换两个数的值
  40.         /// </summary>
  41.         /// <param name="i">左值</param>
  42.         /// <param name="j">右值</param>
  43.         static void Swap(ref int i,ref int j)
  44.         {
  45.             int temp = i;
  46.             i = j;
  47.             j = temp;
  48.         }
复制代码
插入排序采用的是减治法,关于减治法的概念可以百度一下(哈哈,偷懒了)
关于其他算法请参考这里


评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

2 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
受教了,谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马