`
liu0107613
  • 浏览: 71520 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

简单的归并排序算法例子

    博客分类:
  • java
阅读更多

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class GuiBing {
 
 public static void main(String[] args) throws Exception {
  int datalength=1000000;
  GuiBing gui=new GuiBing();
  int[] array1=gui.createArray(datalength);
  int[] array2=gui.createArray(datalength);
  Thread.sleep(20000);

  long startTime = System.nanoTime();//纳秒精度
  long begin_freeMemory=Runtime.getRuntime().freeMemory();
  
  int[] final_array=gui.guibing(array1,array2);
  
  boolean result=gui.testResult(final_array);
  long end_freeMemory=Runtime.getRuntime().freeMemory();
  System.out.println("result===="+result);
  long estimatedTime = System.nanoTime() - startTime; 
  System.out.println("elapsed time(纳秒精度):"+estimatedTime/100000000.0);
  System.out.println("allocated memory:"+(begin_freeMemory-end_freeMemory)/1000.0+" KB");
  Thread.sleep(20000);
 }

 
 /**
  * 显示数组的内容
  * @param array
  */
 private static void dispalyData(int[] array) {
  for(int i=0;i<array.length;i++)
  {
   System.out.printf("%-6d",array[i]);
  }
  System.out.println("");
 }


 /**
  * 测试结果
  * @param final_array
  * @return
  */
 private boolean testResult(int[] final_array) {
  int length=final_array.length;
  for(int i=0;i<length-1;i++){
   if(final_array[i]>final_array[i+1]) return false;
  }
  return true;
  
 }

 /**
  * 算法的思想是:
  * 数组a是有序的,从小到大
  * 数组b是有序的,从小到大
  * 归并两个数组到一个中
  * 1 从两个数组的第一个元素比较,小的放在新数组的第一个位置,小的元素所在的数组索引加1,依此比较
  * 直到结束
  * 2 将剩余元素直接拷贝到新的数组内
  **/

 private int[] guibing(int[] a, int[] b) {
  int[] temp=new int[a.length*2];
  int i=0,j=0,a_length=a.length,b_length=a.length,k=0;
  arraySort(a);
  arraySort(b);
  //dispalyData(a);
  //dispalyData(b);
  while(i<a_length && j<b_length){
   if(a[i]<b[j]){
    temp[k]=a[i];
    k++;i++;
   }else{
    temp[k]=b[j];
    k++;j++;
   }
  }
  while(i<a_length){
     temp[k++]=a[i++];
  }
  while(j<b_length){
   temp[k++]=b[j++]; 
  }
  return temp;
 }

 /**
  * 用集合类Collections升序排列
  * @param a
  */
 @SuppressWarnings({"unchecked","unused"})
 private void sort(final int[] a){
  List list=new ArrayList();
  for(int i=0;i<a.length;i++)
   list.add(a[i]);
  Collections.sort(list);
  Object[] temp=list.toArray();
  for(int i=0;i<temp.length;i++){
   a[i]=(Integer)temp[i];
  }
 }
 
 
 /**
  * 使用系统类对数组以升序排序。
  * @param a
  */
 @SuppressWarnings({"unchecked","unused"})
 private void arraySort(final int[] a){
  Arrays.sort(a);
 }

 /**
  * 根据参数length创建一个随机的整数数组。数组中的值的小于length*2
  * @param length
  * @return
  */
 private int[] createArray(int length) {
  Random random=new Random();
  int[] temp=new int[length];
  int j=0;
  while(j<length){
   temp[j++]=random.nextInt(length<<2); 
  }
  return temp;
  
 }

}

分享到:
评论

相关推荐

    归并排序 归并排序示例

    归并排序,比较高效的排序算法之一。这是一个例子,一个关于归并排序的例子。

    归并排序C++实现的例子

    用C++实现归并排序,题目基于MIT的算法导论中的第二章中的归并排序算法要求,visual studio 2010 实现

    python实现折半查找和归并排序算法

    今天学了折半查找算法,折半查找是蛮简单的,但是归并排序我就挺懵比,看教材C语言写的归并排序看不懂,后来参考了别人的博客,终于搞懂了。 折半查找 先看下课本对于 折半查找的讲解。注意了,折半查找是对于有序...

    Python编程中归并排序算法的实现步骤详解

    基本思想:归并排序是一种典型的分治思想,把一个无序列表一分为二,对每个子序列再一分为二,继续下去,直到无法再进行划分为止。然后,就开始合并的过程,对每个子序列和另外一个子序列的元素进行比较,依次把小...

    Javascript排序算法之合并排序(归并排序)的2个例子

    归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待...

    java策略模式的排序算法例子

    利用java策略模式编写的一个排序方法切换,的小例子。用于学习策略模式是很好的方式。界面写的还可以,仅供大家参考学习

    内部排序算法合集(插入、希尔、起泡、快速、选择、堆、归并和基数排序)

    // 归并排序 //MergeSort( a ); // 基数排序 { SLList b; int i; b.keynum = 3, b.recnum = LENGTH;// 对3位整数进行基数排序 for ( i = 1; i ; i++ ) { b.r[i].keys[0] = objArray[i-1] % 10;//...

    各种排序算法及java例子

    有插入 堆 冒泡 选择 归并 快速排序等相关例子

    C++实现归并排序

    定义:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子...

    JavaScript希尔排序、快速排序、归并排序算法

    为例子。 1.希尔排序。 希尔排序是在插入排序上面做的升级。是先跟距离较远的进行比较的一些方法。 function shellsort(arr){ var i,k,j,len=arr.length,gap = Math.ceil(len/2),temp; while(gap&gt;0){ for (var k...

    内部排序的主要算法及相关可实现程序.rar_hill_内部排序_希尔排序_插入排序

    内部排序的所有算法,而且有相关可执行例子,包括插入排序,选择排序,希尔排序,快速排序,堆排序,归并排序等,很全,很孀。

    数据结构与算法-小例子.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    MergeSort.rar

    简单的归并排序实现例子

    数据结构算法Java实现。关于Java《数据结构算法》核心技术学习积累的例子,是初学者及核心技术巩固的最佳实践。.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    数据结构与算法分析第二版 ---C语言描述(附加答案)

    排序7.1 预备知识7.2 插入排序7.2.1 算法7.2.2 插入排序的分析7.3 一些简单排序算法的下界7.4 希尔排序7.4.1 希尔排序的最坏情形分析7.5 堆排序7.5.1 堆排序的分析7.6 归并排序7.6.1 归并排序的分析7.7 快速排序...

    15个典型的递归算法的JAVA实现

    15个典型的递归算法的JAVA实现,求N的阶乘、欧几里德算法(求最大公约数)、斐波那契数列、汉诺塔问题、树的三种递归遍历方式、快速排序、折半查找、图的遍历、归并排序、八皇后问题(回溯、递归)、棋盘覆盖(分治,...

    十种JAVA排序算法实例

    本文件讲了十种JAVA排序方法(冒泡(Bubble)排序——相邻交换 、选择排序——每次最小/大排在相应的位置 、插入排序——将下一个插入已排好的序列中 、壳(Shell)排序——缩小增量 、归并排序 、快速排序 、堆排序 ...

    数据结构与算法分析

     7.3 一些简单排序算法的下界   7.4 谢尔排序   7.5 堆排序   7.6 归并排序   7.7 快速排序   7.7.1 选取枢纽元   7.7.2 分割策略   7.7.3 小数组   7.7.4 实际的快速排序例程  ...

Global site tag (gtag.js) - Google Analytics