`
endual
  • 浏览: 3561037 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 归并排序 自己写

 
阅读更多

package endual.xier.writeagain;

public class Darray {

	private long[] theArray ;
	private int nElems ;
	
	public Darray(int max) {//构造数组
		
		this.theArray = new long[max] ; 
		this.nElems = 0 ;
	}
	
	public void insert(long value) { //插入数据
		this.theArray[this.nElems] = value ;
		this.nElems++ ;
	}
	
	public void display() { //显示数组

		for (long value :this.theArray) {
			System.out.println(value);
		}
		
	}
	
	
	public void mergeSort() {
		long[] workSpace = new long[this.nElems] ;
		recMergeSort(workSpace, 0, this.nElems-1) ;
	}

	private void recMergeSort(long[] workSpace, int lowerBound, int upperBound) {

		if (lowerBound == upperBound) {
			return ;
		}
		
		else {
			
			int mid = (lowerBound + upperBound) / 2 ; //取到一个枢纽的值
			recMergeSort(workSpace, lowerBound, mid) ;
			recMergeSort(workSpace, mid+1, upperBound) ;
			
			//排列他们
			merge(workSpace, lowerBound, mid+1, upperBound) ;
			
			
			
		}//end else 
	
		
		
	}

	private void merge(long[] workSpace, int lowPtr, //用这个数组将数组的两半归并成一个有序的数组。
			           int highPtr, int upperBound) {
		// TODO Auto-generated method stub
		
		int j = 0 ;
		int lowerBound = lowPtr ;
		int mid = highPtr - 1 ;
		
		int n = upperBound - lowerBound - 1 ; 
		
		while (lowPtr <= mid && highPtr <= upperBound) { //值到两个数组的其中一个用完了
			
			if (this.theArray[lowPtr] < this.theArray[highPtr]) {
				workSpace[j] = this.theArray[lowPtr] ; //将小的那个放入到工作的空间中去
				j++ ; //工作的空间加1
				lowPtr++ ; //最小的那个也加一
			}else if (this.theArray[lowPtr] >= this.theArray[highPtr]) {
				workSpace[j++] = this.theArray[highPtr++] ;
			}
			
		} // end while1
		
		while (lowPtr <= mid) {
			workSpace[j++] = this.theArray[lowPtr++] ; //直接复制进去  这两wihlt值能只执行一个的
		}
		
		while (highPtr <= upperBound) {
			workSpace[j++] = this.theArray[highPtr++] ;//直接复制进去   这两wihlt值能只执行一个的
		}
		
		for (j = 0; j < n; j++) {
			
			this.theArray[lowerBound+j] = workSpace[j] ; //进行复制
			
		}
		
		
		
	} //end
	
	
}

 

 

package endual.xier.writeagain;

public class MergeSortApp {

	public static void main(String[] args) {
		
		Darray da = new Darray(100) ;
		
		for (int i = 0; i < 100; i++) {
			long value = (long) (Math.random() * 10000) ;
			da.insert(value) ;
		}
		
		da.display() ;
		System.out.println("-----------------------------");
		da.mergeSort() ;
		da.display() ;
		
	}
	
	
	
}

 

 

---------------------

 

我昏了,这个居然弄不出来哪里有错误啊,天煞的。

分享到:
评论

相关推荐

    java实现归并排序

    Java实现归并排序 Java 实现归并排序是一种常用的排序算法,通过分治策略将原始数组分成小组,然后对每个小组进行排序,最后将排序好的小组合并成一个有序数组。下面是 Java 实现归并排序的知识点总结: 基本思想 ...

    如何使用Java实现归并排序算法,程序详细解读

    归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序...

    归并排序Java_归并排序_

    在Java中实现归并排序,我们可以创建一个名为`MergeSort`的类来封装整个过程。归并排序的基本思想是将待排序的序列分成两个或更多的子序列,对每个子序列分别进行排序,然后将排序后的子序列合并成一个有序序列。这...

    Java实现归并排序

    在Java中实现归并排序,主要涉及到以下几个关键步骤: 1. **分割(Divide)**:将原始数组分为两个相等(或接近相等)的子数组。这通常通过取数组中间索引来完成。例如,如果数组长度为`n`,则可以将前`n/2`个元素...

    归并排序(JAVA)

    归并排序是一种经典的排序算法,基于分治策略。在Java中实现归并排序,我们可以将一个大数组分成两个...通过深入理解和实践`MergeSort.java`文件,你可以掌握归并排序的基本原理和实现技巧,进一步提升自己的编程能力。

    java归并排序

    在Java中实现归并排序,我们可以分别实现递归版和非递归版,这两种方法各有其特点和适用场景。 ### 1. 分治策略 归并排序的核心是分治法,它将一个大数组分为两个相等或接近相等的子数组,分别对这两个子数组进行...

    java归并外排序

    Java归并外排序是一种在处理大量数据时,利用外部存储器进行排序的算法。当内存不足以容纳所有数据时,就需要借助硬盘等外部存储设备。这种排序算法通常由三个主要步骤组成:分块、内部排序和合并。 1. 分块:首先...

    Java ArrayList实现的快排,归并排序,堆排序

    本篇将重点讲解如何利用ArrayList实现快速排序(Quick Sort)、归并排序(Merge Sort)和堆排序(Heap Sort)这三种经典的排序算法,并探讨它们的原理、优缺点以及在实际应用中的选择。 **快速排序(Quick Sort)**...

    插入排序和归并排序的实现java

    这里我们将深入探讨两种常见的排序算法:插入排序(Insertion Sort)和归并排序(Merge Sort),它们都是在Java环境下实现的。 **插入排序**是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序...

    JavaSwing归并排序动画源码(含其他排序)

    在这个场景中,我们讨论的焦点是使用 Java Swing 来实现一个排序算法的动画展示,特别是归并排序。归并排序是一种高效的、稳定的排序算法,它的基本思想是将大问题分解为小问题来解决,通过递归地将两个或更多有序数...

    归并排序Java源代码

    利用分治法思想实现归并排序,Java语言描述。

    java算法——归并排序

    归并排序 在排序前,先建好一个长度等于原数组长度的临时数组

    JAVA归并排序算法.pdf

    JAVA 归并排序算法 JAVA 归并排序算法是利用 "归并 "技术来进行排序的。归并是指将若干个已排序的子文件合并成一个有序的文件。该算法有两种实现方法:自底向上和自顶向下。 自底向上的方法 自底向上的基本思想是...

    [Java算法-排序]归并排序.java

    该资源包括实用练习,让读者可以练习在Java中实现归并排序,并提供解决方案以帮助读者检查自己的工作并深入理解所学内容。 无论您是Java编程的初学者还是有经验的程序员,该资源都将为您提供有价值的指导和支持,...

    归并排序单步演示软件

    这个“归并排序单步演示软件”特别适合Java学习者,因为Java是实现归并排序的常见编程语言。在Java中,可以使用内置的数据结构如ArrayList或者数组来存储和操作数据,同时利用递归函数实现算法逻辑。 标签中的...

    外部归并排序Java实现

    Java实现外部归并排序的过程包括以下几个关键步骤: 1. **划分阶段**: - 将原始数据分割成多个小文件,每个文件包含可以一次性加载到内存中的数据量。这通常通过创建一系列的子序列(也称为块或桶)完成。 - 对...

    java版冒泡排序,插入排序,堆排序,快速排序,归并排序,希尔排序,桶排序

    它将数组分为两半,分别对左右两半进行归并排序,然后再合并这两个已排序的子数组。Java中,可以使用两个辅助数组来辅助排序和合并的过程。 6. **希尔排序(Shell Sort)**: 希尔排序是插入排序的一种优化版本,...

    JAVA排序大全 冒泡 快速 选择 归并排序

    JAVA排序大全 冒泡 快速 选择 归并排序

    java实现的shell排序快速排序归并排序堆排序

    `mergesort.java`文件应该包含了归并排序的分治过程。 4. **堆排序**: 堆排序是由Napier和Rabin在1962年提出,它利用了堆这种数据结构。堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子节点的键值或索引...

Global site tag (gtag.js) - Google Analytics