Chinaunix首页 | 论坛 | 博客
  • 博客访问: 321033
  • 博文数量: 15
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 179
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-09 18:16
文章分类

全部博文(15)

文章存档

2019年(1)

2018年(1)

2015年(7)

2013年(6)

我的朋友

分类: Java

2013-09-27 14:50:19


归并排序和插入排序的性能分析,在长度为10000的时候,性能明显出现差距。
归并: 0ms
插入: 63ms

点击(此处)折叠或打开

  1. package sort;

  2. import java.util.Random;

  3. public class MergeSort {

  4.     /**
  5.      * @param args
  6.      */
  7.     public static void main(String[] args) {
  8.         int[] arr = new int[10000];
  9.         for (int k = 0; k < arr.length; k++) {
  10.             arr[k] = new Random().nextInt(100);
  11.         }
  12.         long t1 = System.currentTimeMillis();
  13. //        megerSort(arr,0, arr.length - 1);
  14.         insertionSort(arr);
  15.         long t2 = System.currentTimeMillis();
  16.         System.out.println(t1);
  17.         System.out.println(t2);
  18.         System.out.println(t2 - t1);
  19.     }

  20.     //插入排序
  21.     public static void insertionSort(int[] array) {
  22.         for (int i = 1; i < array.length; i++) {
  23.             int key = array[i];
  24.             int j = i - 1;
  25.             while (j >= 0 && key < array[j]) {
  26.                 array[j + 1] = array[j];
  27.                 j--;
  28.             }
  29.             array[j + 1] = key;
  30.         }
  31.     }
  32.     
  33.     public static void megerSort(int[] arr, int p, int r) {
  34.         //长度大于1时继续分治
  35.         if (p < r) {
  36.             int q = 0;
  37.             q = (p + r) /2;
  38.             //分治
  39.             megerSort(arr, p, q);
  40.             megerSort(arr, q + 1, r);
  41.             //归并
  42.             meger(arr, p, q, r);
  43.         }
  44.     }
  45.     
  46.     //归并
  47.     public static void meger(int[] arr, int p, int q, int r){
  48.         int n1 = q - p + 1;
  49.         int n2 = r - q;
  50.         int[] left = new int[n1 + 1];
  51.         int[] right = new int[n2 + 1];
  52.         int i;
  53.         int j;
  54.         for (i = 0; i < n1; i++) {
  55.             left[i] = arr[p + i];
  56.         }
  57.         left[n1] = Integer.MAX_VALUE;
  58.         for (j = 0; j < n2; j++) {
  59.             right[j] = arr[q + j + 1];
  60.         }
  61.         right[n2] = Integer.MAX_VALUE;
  62.         
  63.         i = 0;
  64.         j = 0;
  65.         
  66.         for (int k = p; k <=r; k++) {
  67.             if (left[i] <= right[j]) {
  68.                 arr[k] = left[i++];
  69.             } else {
  70.                 arr[k] = right[j++];
  71.             }
  72.         }
  73.     }
  74.     
  75. }




阅读(1538) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~