`

算法排序-归并排序 自底向上(二)

 
阅读更多

自底向上的归并算法

 

package com.zwl.net;

/**
 * 自底向上递归归并排序
 * @author v.zhaowenlong
 * @date2013-11-22 上午10:39:37
 */
public class MergeBU {
	
	private  Comparable[] aux;
	
	
	
	public static void main(String[] args) {
		String[] a={"E","E","G","M","R","A","C","E","R","T"};
		MergeSort ms=new MergeSort();
		ms.sort(a);
		for(int i=0;i<a.length;i++)
			System.out.print(a[i]);
		
	}
	
	public void sort(Comparable[] a){
		int n=a.length;
		aux=new Comparable[a.length];
		for(int sz=1;sz<n;sz=sz+sz){
			for(int lo=0;lo<n;lo=lo+sz+sz){
				merge(a, lo,lo+sz-1,lo+sz+sz-1);
			}
		}
	}
	

	
	/**
	 * 原地归并排序
	 * @param a
	 * @param loj
	 * @param mid
	 * @param hi
	 */
	public void merge(Comparable[] a,int lo, int mid,int hi){
		int i=lo;
		int j=mid+1;
		
		//数组复制
		for(int k=lo;k<=hi;k++){
			aux[k]=a[k];
		}
		for(int k=lo;k<=hi;k++){
			if(i>mid)a[k]=aux[j++];
			else if(j>hi)a[k]=aux[i++];
			else if(less(aux[i],aux[j]))a[k]=aux[i++];
			else a[k]=aux[j++];
		}
	}
	
	/**
	 * 判断字母大小
	 * @param a
	 * @param b
	 * @return
	 */
	private  static boolean less(Comparable a,Comparable b){	
		int result=a.compareTo(b);
		return result<0?true:false;
	}
}

 




 
 

  • 大小: 84.3 KB
分享到:
评论

相关推荐

    算法-理论基础- 排序- 归并排序(包含源程序).rar

    6. 可能还包括一些优化技巧,如自底向上归并排序、三向切分归并排序(用于处理有大量重复元素的数组)等。 通过深入学习和理解归并排序,你可以提升在算法设计和数据结构方面的技能,这对于解决复杂的编程问题和...

    排序-归并排序(Merge sort)

    虽然它的空间复杂度相对较高,但通过优化,例如使用自底向上的归并策略,可以在一定程度上减少空间需求。在理解和实现排序算法的过程中,掌握归并排序对于提升编程技能和解决问题能力是非常有益的。

    排序算法-归并排序详细讲解(MergeSort)

    1. 自底向上归并排序:为了避免递归带来的开销,可以采用自底向上的方法,从长度为1的子序列开始,逐步合并成更大的有序序列。 2. 插入排序优化:对于小规模的子序列,可以考虑使用插入排序,因为插入排序在小规模...

    java 排序算法 选择排序,插入排序,自顶向上合并排序,合并排序,快速排序

    归并排序是一种采用分治法的排序算法,自顶向下的归并排序则是从大问题开始分解,每次将两个子序列合并成一个有序序列。具体步骤如下: - 将大序列不断拆分成长度为1的子序列。 - 比较相邻的子序列,将它们合并成...

    自底向上归并排序和冒泡排序时间对比

    本篇文章将详细讨论两种经典的排序算法:自底向上的归并排序(Bottom-Up Merge Sort)和冒泡排序,并通过Java实现进行时间复杂度的对比。 首先,我们来看冒泡排序。冒泡排序是一种简单的交换排序,它通过重复遍历待...

    归并排序(Merge sort)(台灣譯作:合併排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

    - 如果内存限制允许,可以使用自底向上的归并排序方法,避免递归带来的开销。 - 在合并过程中,可以使用“缓冲区”技术,减少不必要的内存分配和释放,提高效率。 归并排序的应用场景: - 数据量较大且对稳定性有...

    算法-数据结构之归并排序.rar

    - **自底向上的归并排序**:与传统的自顶向下递归方法相比,自底向上归并排序避免了重复的子问题,减少了函数调用的开销。 - **三向切分归并排序**:在处理包含大量重复元素的数组时,三向切分归并排序可以减少...

    C++实现自底向上的归并排序算法

    自底向上的归并排序是一种高效的排序算法,它利用了分治的思想,通过逐步合并小的有序序列来构建大的有序序列。在C++中实现这种排序算法,首先需要理解其基本原理。 一、算法描述 自底向上的归并排序算法主要分为...

    算法-理论基础- 排序- 原始冒泡排序(包含源程序).rar

    冒泡排序是一种基础且经典的排序算法,它...通过学习冒泡排序,我们可以更好地理解排序算法的运作模式,并为学习更复杂的排序算法如快速排序、归并排序等奠定基础。同时,这也是训练编程思维和问题解决能力的良好实践。

    根号n段归并排序算法

    // 自底向上的归并排序 void squareRootMergeSort(vector&lt;int&gt;& arr, int n) { int sqrt_n = sqrt(n); for (int block_size = sqrt_n; block_size &gt; 1; block_size /= 2) { for (int l = 0; l ; l += block_size ...

    C++/GoLang如何实现自底向上的归并排序

    在本文中,我们将探讨如何使用C++和GoLang实现自底向上的归并排序。归并排序是一种基于分治策略的排序算法,它将大问题分解为小问题,然后逐步合并解决,最终达到整个序列有序的状态。自底向上的归并排序方法避免了...

    基础排序, 高级排序, 堆, 二分搜索树, 并查集, 图以及图相关算法知识总结

    归并排序自底向上 快速排序 随机化快速排序 双路快速排序 三路快速排序 堆和堆排序 堆的基本存储 ShiftUp ShiftDown 基础堆排序和Heapify 优化的堆排序 索引堆(IndexHeap) 索引堆的优化 二分搜索树 二分查找法...

    归并排序 排序

    归并排序是一种基于分治策略的高效排序算法,它的核心思想是将大问题分解成小问题,逐个解决,然后再将结果合并,最终得到整个问题...在自底向上的归并排序实现中,这可以通过在合并过程中维护一个逆序对计数器来完成。

    快速排序、归并排序、希尔排序、冒泡排序、选择排序等8中排序方式原理分析java实现

    在实际编程中,我们还需要考虑性能优化,如快速排序中的随机化基准选取,以及归并排序中的自底向上的实现等。同时,为了使代码可读性更强,通常会采用面向对象的方式,将每种排序方法封装成单独的类或方法。 总结来...

    查找相关算法

    //创建菜单 cout&lt;&lt;"----------线性表查找算法主菜单---------";... cout* 14--归并排序(自底向上) *"; cout*-------------------------------------*"; cout请选择操作(0-14):"; cin&gt;&gt;nMenu;

    数据结构各排序算法比较-配套《高分笔记》

    归并排序是稳定的排序算法。 四、基数类排序: 基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;以此类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。...

Global site tag (gtag.js) - Google Analytics