`

(排序算法二)合并排序

阅读更多
自己写的,欢迎拍砖!
public class MergeSort {

	/**
	 * 合并排序
	 * @param args
	 */
	public static void main(String[] args) {
		int[] sourceArray = {22,428,23,76,24,4,52,45,6,56,13,75,76,9,6,342,5,67};
		MergeSort is = new MergeSort();
		int[] targetArray = is.sort(sourceArray);
		for (int i = 0; i < targetArray.length; i++) {
			int j = targetArray[i];
			System.out.println(j);
		}
	}
	
	private int[] sort(int [] sourceArray){
		
		merge_sort(sourceArray, 0, sourceArray.length-1);
		return sourceArray;
	}
	
	private void merge_sort(int[] source, int begin, int end){
		if(begin < end){
			int middle = (begin + end)/2;
			merge_sort(source, begin, middle);
			merge_sort(source, middle+1, end);
			merge(source, begin, end, middle);
		}
	}

	private void merge(int[] source, int begin, int end, int middle) {
		/**
		 * 分成两个数组left,right之间的合并
		 * 并分别用i,j来记录比较的位置
		 */
		int m = middle - begin + 1;
		int n = end - middle;
		int[] left = new int[m];
		int[] right = new int[n];
		
		for (int i = 0; i < left.length; i++) {
			left[i] = source[begin + i];
		}
		for (int i = 0; i < right.length; i++) {
			right[i] = source[middle + i + 1];
		}
		
		int i,j,k=begin;
		//开始逐位比较左右两个有序的数据大小
		for(i=0,j=0; i<m && j<n; k++){
			if(left[i] > right[j]){
				source[k] = right[j];
				j++;
			}else{
				source[k] = left[i];
				i++;
			}
		}
		//其中有一们已经比完了,剩下的直接添加到source中就可以了
		while(i<m){
			source[k] = left[i];
			k++;
			i++;
		}
		while(j<n){
			source[k] = right[j];
			k++;
			j++;
		}
	}
}
分享到:
评论

相关推荐

    排序算法(合并排序,快速排序)

    这里我们主要探讨两种经典的排序算法:快速排序和合并排序。 快速排序是一种分治算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是选取一个基准元素,将数组分为两部分,一部分的所有元素都小于或...

    最快的排序算法 计算机最快的算法-史上14个最快速算法:孩子的计算能力爆表!大脑堪比计算机!...,排序算法数据结构

    归并排序算法是一种高效的排序算法,它的工作原理是通过将数组分为两个部分,然后将每个部分排序,最终合并两个部分以达到排序的目的。归并排序算法的时间复杂度为O(n log n),因此它适合大规模的数据排序。 6.堆...

    算法设计与分析-1排序算法性能分析-冒泡/选择/插入/合并/快速排序-pre ppt

    本篇文章将详细讨论几种常见的排序算法:选择排序、冒泡排序、插入排序、合并排序以及快速排序,分析它们的算法原理、时间效率,并通过经验分析验证理论分析的准确性。 **1. 选择排序(Selection Sort)** 选择排序...

    C经典算法之合并排序法

    本篇文章将介绍一种经典的排序算法——**合并排序法**(Merge Sort),并通过C语言实现该算法。合并排序是一种非常有效的排序方法,其核心思想是分治法:将数据分为若干个子集,对这些子集分别进行排序,最后将排序...

    排序算法-合并排序

    **二、合并排序的步骤** 1. **分解**:将原始序列拆分为两个相等(或接近相等)的子序列。 2. **递归排序**:对每个子序列递归地应用合并排序。 3. **合并**:将两个已排序的子序列合并为一个完整的有序序列。 4...

    Strassen矩阵乘法和棋盘覆盖和自然合并排序算法

    Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘...

    自然合并排序算法

    自然合并排序算法,对合并排序算法进行进一步的优化

    合并排序算法

    #### 二、合并排序的基本思想 1. **分解**:将数组分成两个部分。 2. **递归排序**:对每一部分进行递归地排序。 3. **合并**:将排序好的两部分合并成一个有序数组。 #### 三、关键步骤解析 ##### 3.1 `...

    各种排序算法比较(java实现)

    本文将详细探讨标题所提及的几种排序算法:合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合Java语言的实现进行解析。 1. **合并排序(Merge Sort)**: 合并排序是一种基于分治策略的排序算法...

    合并排序算法C语言源程序.zip

    合并排序是一种高效的、基于分治思想的排序算法。在C语言中实现合并排序,我们可以深入理解这个算法的原理,以及如何用C语言来编写代码。本文将详细探讨合并排序算法的理论基础,C语言实现的关键步骤,以及如何验证...

    合并排序算法和二分搜索技术算法的实现实验报告.doc

    合并排序算法和二分搜索技术算法的实现实验报告.doc

    常用的排序算法总结(各种内部排序算法和外部排序算法)

    排序算法是计算机科学中最基础和重要的算法之一,用于将一组数据按照特定的顺序进行排列。本文将对几种常见的内部排序算法和外部排序算法进行详细总结。 首先,排序的基本定义是:给定一个包含n个记录的序列,其...

    内部排序算法分析

    本主题将深入探讨内部排序算法,并结合C语言代码进行解析。内部排序,顾名思义,是指数据在主存储器(内存)内完成的排序过程,与外部排序相对,后者通常用于处理超出内存容量的大数据集。 1. **基本排序算法**: ...

    c语言链表的排序算法-排序链表最快的算法是什么?.pdf

    我们将比较不同的排序算法,包括合并排序和快速排序,并分析它们在链表中的性能。 首先,让我们讨论链表排序算法的挑战。链表的节点分布在内存中,可能会导致缓存未命中的情况,这会严重影响排序算法的性能。为了...

    排序算法.pdf

    1. 熟练运用冒泡排序、选择排序、插入排序、希尔排序、快速排序、合并排序、堆排序等七种常见的内排序算法 2. 使用不同的数据结合计算各种算法的运行时间,验证算法的时间复杂性 3. 能够运用二路归并算法进行外排序 ...

    各种简单的排序算法(快速,合并,堆,计数,包含整数和字符串)

    本文将详细介绍五种常见的排序算法:快速排序、合并排序、堆排序以及基于整数和字符串的计数排序,并通过比较它们的特性来分析各自的优势与劣势。 **1. 快速排序** 快速排序是由C.A.R. Hoare提出的,它是一种分治...

    合并排序算法——merge sort

    /************合并排序算法的实现******************/ int main() { int p,q,r; printf("合并排序算法的实现:\n"); printf("请输入p、q、r的值(输入格式1,12,13):"); scanf("%d,%d,%d",&p,&q,&r); printf("p=%...

    Android-Android图形化展示排序算法

    在Android开发中,将排序算法以图形化的方式展示出来,不仅可以帮助开发者更好地理解和记忆各种排序算法的工作原理,还可以为教学和学习提供直观的工具。"Android-Android图形化展示排序算法"项目,就是这样一个旨在...

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

    以下将详细讲解标题和描述中提到的五种排序算法:选择排序、插入排序、自顶向上合并排序、合并排序以及快速排序。 1. **选择排序(Selection Sort)** 选择排序是一种简单直观的排序算法,它的工作原理是每一次从待...

    合并排序算法的代码实现

    合并排序(Merge Sort)是一种基于分治策略的高效排序算法,它的主要特点是稳定且具有较高的时间效率。在本文中,我们将深入探讨合并排序的工作原理、Java实现细节以及其优势和适用场景。 ### 合并排序的基本思想 ...

Global site tag (gtag.js) - Google Analytics