Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 343|回复: 0

[算法学习]并归排序

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-30 23:59:30 | 显示全部楼层 |阅读模式
    并归排序:
      将两个或两个以上的有序数组组合成一个新的有序数组,叫并归排序

    排序过程
    1、 设初始数组有n个数据,则可看成n个有序的子数组,
            每个子数组长度为1;
    2、 两两合并,得到n/2或n/2+1 个长度为2 或1 的有序子数组;
    3、 再两两合并,…… 如此重复,直至得到一个长度为n 的
            有序数组为止。
       
      
       
      
      
      下面是并归排序的递归实现:
    1. class DArray
    2.    {
    3.    private long[] theArray;          // ref to array theArray
    4.    private int nElems;               // number of data items
    5.    public DArray(int max)            // constructor
    6.       {
    7.       theArray = new long[max];      // create array
    8.       nElems = 0;
    9.       }
    10.    public void insert(long value)    // put element into array
    11.       {
    12.       theArray[nElems] = value;      // insert it
    13.       nElems++;                      // increment size
    14.       }
    15.    public void display()             // displays array contents
    16.       {
    17.       for(int j=0; j< nElems; j++)    // for each element,
    18.          System.out.print(theArray[j] + " ");  // display it
    19.       System.out.println("");
    20.       }
    21.    public void mergeSort()           // called by main()
    22.       {                              // provides workspace
    23.       long[] workSpace = new long[nElems];
    24.       recMergeSort(workSpace, 0, nElems-1);
    25.       }
    26.    private void recMergeSort(long[] workSpace, int lowerBound,
    27.                                                int upperBound)
    28.       {
    29.       if(lowerBound == upperBound)            // if range is 1,
    30.          return;                              // no use sorting
    31.       else
    32.          {                                    // find midpoint
    33.          int mid = (lowerBound+upperBound) / 2;
    34.                                               // sort low half
    35.          recMergeSort(workSpace, lowerBound, mid);
    36.                                               // sort high half
    37.          recMergeSort(workSpace, mid+1, upperBound);
    38.                                               // merge them
    39.          merge(workSpace, lowerBound, mid+1, upperBound);
    40.          }  // end else
    41.       }  // end recMergeSort()
    42.    private void merge(long[] workSpace, int lowPtr,
    43.                            int highPtr, int upperBound)
    44.       {
    45.       int j = 0;                             // workspace index
    46.       int lowerBound = lowPtr;
    47.       int mid = highPtr-1;
    48.       int n = upperBound-lowerBound+1;       // # of items
    49.       while(lowPtr <= mid && highPtr <= upperBound)
    50.          if( theArray[lowPtr] < theArray[highPtr] )
    51.             workSpace[j++] = theArray[lowPtr++];
    52.          else
    53.             workSpace[j++] = theArray[highPtr++];
    54.       while(lowPtr <= mid)
    55.          workSpace[j++] = theArray[lowPtr++];
    56.       while(highPtr <= upperBound)
    57.          workSpace[j++] = theArray[highPtr++];
    58.       for(j=0; j< n; j++)
    59.          theArray[lowerBound+j] = workSpace[j];
    60.       }  // end merge()
    61.   
    62.    }  // end class DArray
    63. class MergeSortApp
    64.    {
    65.    public static void main(String[] args)
    66.       {
    67.       int maxSize = 100;             // array size
    68.       DArray arr;                    // reference to array
    69.       arr = new DArray(maxSize);     // create the array
    70.       arr.insert(64);                // insert items
    71.       arr.insert(21);
    72.       arr.insert(33);
    73.       arr.insert(70);
    74.       arr.insert(12);
    75.       arr.insert(85);
    76.       arr.insert(44);
    77.       arr.insert(3);
    78.       arr.insert(99);
    79.       arr.insert(0);
    80.       arr.insert(108);
    81.       arr.insert(36);
    82.       arr.display();                 // display items
    83.       arr.mergeSort();               // merge sort the array
    84.       arr.display();                 // display items again
    85.       }  // end main()
    86.    }  // end class MergeSortApp
    复制代码
    运行结果:
    C:java>java MergeSortApp
    64 21 33 70 12 85 44 3 99 0 108 36
    0 3 12 21 33 36 44 64 70 85 99 108
       
         
         
          
          

            
          

            
          
         
       
      
      









    源码下载:http://file.javaxxz.com/2014/10/30/235930546.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-18 21:30 , Processed in 0.419641 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表