码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础知识强化56:经典算法之归并排序(MergeSort)

时间:2015-09-24 10:51:08      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

1. 归并排序的原理:

原理,把原始数组分成若干子数组,对每一个子数组进行排序,

继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组

举例:

无序数组[6 2 4 1 5 9]

  先看一下每个步骤下的状态,完了再看合并细节

第一步: [6 2 4 1 5 9]原始状态

第二步: [2 6] [1 4] [5 9]两两合并排序,排序细节后边介绍

第三步: [1 2 4 6] [5 9]继续两组两组合并

第四步: [1 2 4 5 6 9]合并完毕,排序完毕

       输出结果:[1 2 4 5 6 9]

 

2. 归并排序代码实现:

 1 package cn.itcast;
 2 
 3 /*
 4  * 归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。   
 5  * 如设有数列{6,202,100,301,38,8,1}   
 6  * 初始状态: [6] [202] [100] [301] [38] [8] [1] 比较次数   
 7  * i=1 [6 202 ] [ 100 301] [ 8 38] [ 1 ] 3   
 8  * i=2 [ 6 100 202 301 ] [ 1 8 38 ] 4   
 9  * i=3 [ 1 6 8 38 100 202 301 ] 4 
10  */
11 public class MergeSort {
12     public static void sort(int[] data) {
13         int[] temp = new int[data.length];
14         mergeSort(data, temp, 0, data.length - 1);
15     }
16 
17     private static void mergeSort(int[] data, int[] temp, int l, int r) {
18         int mid = (l + r) / 2;
19         if (l == r)
20             return;
21         mergeSort(data, temp, l, mid);
22         mergeSort(data, temp, mid + 1, r);
23 
24         for (int i = l; i <= r; i++) {
25             temp[i] = data[i];
26         }
27         int i1 = l;
28         int i2 = mid + 1;
29         for (int cur = l; cur <= r; cur++) {
30             if (i1 == mid + 1)
31                 data[cur] = temp[i2++];
32             else if (i2 > r)
33                 data[cur] = temp[i1++];
34             else if (temp[i1] < temp[i2])
35                 data[cur] = temp[i1++];
36             else
37 
38                 data[cur] = temp[i2++];
39         }
40     }
41 }

 

Java基础知识强化56:经典算法之归并排序(MergeSort)

标签:

原文地址:http://www.cnblogs.com/hebao0514/p/4834419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!