package com.arithmetic;
import java.util.Random;
/**
* 归并排序
*
一个归并排序的例子:对一个随机点的链表进行排序
分类 排序算法
数据结构 数组
最差时间复杂度 Θ(nlog n)
最优时间复杂度 Θ(n)
平均时间复杂度 Θ(nlog n)
最差空间复杂度 Θ(n)
最佳算法 有时是
*
* @author xugang
*
*/
public class Merge {
//合并已排序的数组
public static void merge( int[] arr , int low , int mid ,int high , int[] temp ){ //int[] a , int[] b
int first = low ;
int first2 = mid+1 ;
int i = 0 ;
for( ; first<=mid && first2<=high; i++ ){
if( arr[first] < arr[first2] ){
temp[i] = arr[first];
first++;
} else{
temp[i] = arr[first2];
first2++;
}
}
while( first<=mid){
temp[i] = arr[first];
first++;i++;
}
while( first2<=high){
temp[i] = arr[first2];
first2++;i++;
}
for (int p = 0; p < i ; p++) {
arr[low+p] = temp[p];
}
}
//递归
public void mergeSort( int[] arr , int first , int last , int[] temp ){
int mid = 0 ;
if( first < last ){
mid = (first+last)/2 ;
mergeSort(arr, first, mid , temp);
mergeSort(arr, mid+1, last , temp);
merge(arr, first, mid, last , temp );
}
}
public static void main(String[] args) {
Random random = new Random();
int size = 100000 ;
int[] r = new int[size];
for (int i = 0; i < r.length; i++) {
r[i] = Math.abs(random.nextInt())%10000000 ;
}
Merge m = new Merge();
int[] temp = new int[r.length];
long l1 = System.currentTimeMillis();
m.mergeSort(r, 0, r.length-1,temp);
long l2 = System.currentTimeMillis();
System.out.println( "消耗=" + (l2 - l1) ) ;
// for (int i = 0; i < r.length; i++) {
// System.out.println(r[i]);
// }
}
}
分享到:
相关推荐
JAVA 归并排序算法 JAVA 归并排序算法是利用 "归并 "技术来进行排序的。归并是指将若干个已排序的子文件合并成一个有序的文件。该算法有两种实现方法:自底向上和自顶向下。 自底向上的方法 自底向上的基本思想是...
Java实现归并排序 Java 实现归并排序是一种常用的排序算法,通过分治策略将原始数组分成小组,然后对每个小组进行排序,最后将排序好的小组合并成一个有序数组。下面是 Java 实现归并排序的知识点总结: 基本思想 ...
JAVA归并排序
在Java中实现归并排序,我们可以将一个大数组分成两个小数组,分别对它们进行排序,然后将排序后的子数组合并成一个有序的大数组。这个过程会递归地进行,直到每个子数组只包含一个元素,因为单个元素天生就是有序的...
归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序...
在Java中实现归并排序,我们可以创建一个名为`MergeSort`的类来封装整个过程。归并排序的基本思想是将待排序的序列分成两个或更多的子序列,对每个子序列分别进行排序,然后将排序后的子序列合并成一个有序序列。这...
Java 归并排序算法和堆排序算法实例详解 Java 归并排序算法是将两个或两个以上有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 基本...
在Java中实现归并排序,主要涉及到以下几个关键步骤: 1. **分割(Divide)**:将原始数组分为两个相等(或接近相等)的子数组。这通常通过取数组中间索引来完成。例如,如果数组长度为`n`,则可以将前`n/2`个元素...
在Java编程中,归并排序通过将大问题分解为小问题来解决,然后将结果合并以得到最终解决方案。这种算法的时间复杂度为O(n log n),在处理大数据集时表现稳定且效率高。 归并排序的核心步骤包括: 1. **分割...
归并排序的链表实现 随机生成实验数据,可以统计算法运行时间
Java归并外排序是一种在处理大量数据时,利用外部存储器进行排序的算法。当内存不足以容纳所有数据时,就需要借助硬盘等外部存储设备。这种排序算法通常由三个主要步骤组成:分块、内部排序和合并。 1. 分块:首先...
**Java 归并排序详解** 归并排序是一种基于分治思想的排序算法,它的核心在于将两个或多个已排序的子序列合并成一个完整的有序序列。这种排序方法因其高效的性能和稳定性,在各种排序算法中占有重要的地位。 ### ...
以下是一个简单的Java归并排序代码示例: ```java public class MergeSort { public static void mergeSort(int[] arr) { if (arr == null || arr.length ) { return; } mergeSort(arr, 0, arr.length - 1); ...
在这个场景中,我们讨论的焦点是使用 Java Swing 来实现一个排序算法的动画展示,特别是归并排序。归并排序是一种高效的、稳定的排序算法,它的基本思想是将大问题分解为小问题来解决,通过递归地将两个或更多有序数...
本篇将重点讲解如何利用ArrayList实现快速排序(Quick Sort)、归并排序(Merge Sort)和堆排序(Heap Sort)这三种经典的排序算法,并探讨它们的原理、优缺点以及在实际应用中的选择。 **快速排序(Quick Sort)**...
Java 归并排序算法是一种基于分治思想的高效排序算法,它的主要特点是稳定且具有较高的时间复杂度效率。归并排序的基本操作包括将大问题分解为小问题,然后逐个解决小问题,最后将解决好的小问题合并为解决大的问题...
这里我们将深入探讨两种常见的排序算法:插入排序(Insertion Sort)和归并排序(Merge Sort),它们都是在Java环境下实现的。 **插入排序**是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序...
这个“归并排序单步演示软件”特别适合Java学习者,因为Java是实现归并排序的常见编程语言。在Java中,可以使用内置的数据结构如ArrayList或者数组来存储和操作数据,同时利用递归函数实现算法逻辑。 标签中的...