【排序算法】归并排序
2015-08-28 09:38
176 查看
package sort.algorithm.merg; public class Merg { // 归并算法--划分解决排序 // 归并排序的最坏情况运行时间、平均情况运行时间以及最好情况运行时间都是O(nlogn) // 归并排序的最坏情况运行时间是O(nlogn),而快速排序的最坏情况运行时间是O(n^2).但是归并排序需要更多的存储空间,因为它 // 需要一个额外的数组 public static void mergeSort(int data[], int first, int n) { int n1; int n2; if (n > 1) { n1 = n / 2; n2 = n - n1; mergeSort(data, first, n1); mergeSort(data, first + n1, n2); merge(data, first, n1, n2); } } private static void merge(int[] data, int first, int n1, int n2) { int[] temp = new int[n1 + n2]; int copied = 0; int copied1 = 0; int copied2 = 0; while ((copied1 < n1) && (copied2 < n2)) { if (data[first + copied1] < data[first + n1 +copied2]) { temp[copied++] = data[first+copied1]; copied1++; } else { temp[copied++] = data[first + n1 + copied2]; copied2++; } } while (copied1 < n1) temp[copied++] = data[first+(copied1++)]; while (copied2 < n2) temp[copied++] = data[first+n1+(copied2++)]; for (int i = 0; i < temp.length; i++) data[first+i] = temp[i]; } public static void main(String[] args) { int data[] = {80, 30, 60, 50, 40, 70, 20, 10, 5, 0}; mergeSort(data,0,10); for (int i = 0; i < data.length; i++) { System.out.print(data[i] + ","); } } }
运行结果:
0,5,10,20,30,40,50,60,70,80,
相关文章推荐
- POJ 2608 Soundex(水~)
- POJ 2606 Rabbit hunt(计算几何)
- POJ 2591 Set Definition(数论)
- 在运行时加载XIB文件
- Struts Hello World Example
- jquery $(document).ready() 与window.onload的区别
- EJB简介
- UMCrashAnalyze总结
- 调用百度地图接口获取地理位置手机电脑通用
- JS日期的获取与加减
- java学习中易忽略的知识
- PPT控电脑端怎么样
- android adapter的notifyDataSetChanged不起作用
- POJ 2579 && HDU 1218 Blurred Vision(水~)
- 日经社説 20150828 薬局の機能を高め医療の効率化進めよ
- UVA10976 Fractions Again?!
- 【排序算法】插入排序
- C# Winform简单绘图 (在直角坐标系中画折线)
- 日经春秋 20150828
- 地理编码(根据地址得出位置并且加上自定义的大头针)