zoukankan      html  css  js  c++  java
  • 归并排序

     1         /// <summary>
     2         /// 归并排序_合并
     3         /// </summary>
     4         /// <param name="v"></param>
     5         /// <param name="first"></param>
     6         /// <param name="mid"></param>
     7         /// <param name="last"></param>
     8         public static int[] Merger(int[] v, int first, int mid, int last)
     9         {
    10             Queue<int> tempV = new Queue<int>();
    11             int indexA, indexB;
    12             //设置indexA,并扫描subArray1 [first,mid]
    13             //设置indexB, 并扫描subArray2 [mid,last]
    14             indexA = first;
    15             indexB = mid;
    16             //在没有比较完两个子标的情况下,比较 v[indexA]和v[indexB]
    17             //将其中小的放到临时变量tempV中
    18             while (indexA < mid && indexB < last)
    19             {
    20                 if (v[indexA] < v[indexB])
    21                 {
    22                     tempV.Enqueue(v[indexA]);
    23                     indexA++;
    24                 }
    25                 else
    26                 {
    27                     tempV.Enqueue(v[indexB]);
    28                     indexB++;
    29                 }
    30             }
    31             //复制没有比较完子表中的元素
    32             while (indexA < mid)
    33             {
    34                 tempV.Enqueue(v[indexA]);
    35                 indexA++;
    36             }
    37             while (indexB < last)
    38             {
    39                 tempV.Enqueue(v[indexB]);
    40                 indexB++;
    41             }
    42             int index = 0;
    43             while (tempV.Count > 0)
    44             {
    45                 v[first + index] = tempV.Dequeue();
    46                 index++;
    47             }
    48             return v;
    49         }
    50 
    51         /// <summary>
    52         /// 归并算法
    53         /// 原理:把原始数组分成若干子数组,对每一个子数组进行排序,
    54         ///       继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组
    55         /// </summary>
    56         /// <param name="v"></param>
    57         /// <param name="first"></param>
    58         /// <param name="last"></param>
    59         public static int[] MergerSort(int[] v, int first, int last)
    60         {
    61             if (first + 1 < last)
    62             {
    63                 int mid = (first + last) / 2;
    64                 MergerSort(v, first, mid);  //数组前一半
    65                 MergerSort(v, mid, last);   //数组后一半
    66                 v = Merger(v, first, mid, last);  //合并子序列
    67             }
    68             return v;
    69         }
    工欲善其事,必先利其器。
  • 相关阅读:
    c++ 虚继承与继承的差异 (转)
    主题:PageRank解释
    (转)开源爬虫larbin分析
    Django随笔
    原生爬虫小Demo
    SVN
    Python的正则表达式与JSON
    类库 方法 模块等
    笔记
    自动补全Typeahead
  • 原文地址:https://www.cnblogs.com/zhangzhu/p/2836125.html
Copyright © 2011-2022 走看看