`
狂盗一枝梅
  • 浏览: 19630 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

【数据结构】【排序】归并排序

阅读更多

顾名思义,归并排序的核心思想就是“归并”,将两个有序的数列进行“二路归并”能够非常快速的实现合并成一个有序数列:

public static void mergeArray(int[] array,int[] temp,int low,int midLoc,int high){
		int i=low;
		int j=midLoc+1;
		int k=0;
		while(i<=midLoc&&j<=high){
			if(array[i]<array[j]){
				temp[k++]=array[i];
				i++;
			}else{
				temp[k++]=array[j];
				j++;
			}
		}
		while(i<=midLoc){
			temp[k++]=array[i];
			i++;
		}
		while(j<=high){
			temp[k++]=array[j];
			j++;
		}
		for(i=0;i<k;i++){
			array[i+low]=temp[i];
		}
	}

 使用这种思想,可以递归的将一个无序的数列切割成一个个的小子数列,直到最小长度1,然后两两之间进行归并,最终就能够实现数列的整体有序了:

import java.util.Scanner;

public class MergeSort{
	public static void main(String args[]){
		Scanner scanner=new Scanner(System.in);
		int total=scanner.nextInt();
		int[] array=new int[1024];
		for(int i=0;i<total;i++){
			array[i]=scanner.nextInt();
		}
		//这里定义一个临时数组以提高效率(只定义这一个)
		int temp[]=new int[1024];
		mergeSort(array,0,total-1,temp);
		output(array,total);
	}
	public static void output(int[] array,int total){
		for(int i=0;i<total;i++){
			System.out.print(array[i] +" ");
		}	
		System.out.println();
	}
	
	public static void mergeSort(int[] array,int low,int high,int[] temp){
		if(low<high){
			int midLoc=(low+high)/2;
			mergeSort(array,low,midLoc,temp);	
			mergeSort(array,midLoc+1,high,temp);
			mergeArray(array,temp,low,midLoc,high);
		}
	}
	public static void mergeArray(int[] array,int[] temp,int low,int midLoc,int high){
		int i=low;
		int j=midLoc+1;
		int k=0;
		while(i<=midLoc&&j<=high){
			if(array[i]<array[j]){
				temp[k++]=array[i];
				i++;
			}else{
				temp[k++]=array[j];
				j++;
			}
		}
		while(i<=midLoc){
			temp[k++]=array[i];
			i++;
		}
		while(j<=high){
			temp[k++]=array[j];
			j++;
		}
		for(i=0;i<k;i++){
			array[i+low]=temp[i];
		}
	}
}

 输入N个数作为数组的长度,然后输入N个无序的整数,回车即可查看排序的结果:

写道
输入:

10

1 4 7 2 5 8 3 6 9 0

输出:

0 1 2 3 4 5 6 7 8 9

 

分享到:
评论

相关推荐

    数据结构——归并排序

    《数据结构》严蔚敏版是计算机科学的经典教材,其中对归并排序有深入的阐述。下面我们将详细探讨归并排序的原理、实现方式以及其在实际应用中的优势。 一、归并排序的基本概念 归并排序的核心思想是将大问题分解为...

    数据结构排序选择排序归并排序基数排序PPT学习教案.pptx

    数据结构排序选择排序归并排序基数排序PPT学习教案.pptx

    数据结构堆排序 快速排序 归并排序

    首先,堆排序是一种基于比较的排序算法,利用了二叉堆的数据结构。二叉堆是一个完全二叉树,可以分为最大堆或最小堆,其中每个父节点的值都大于或等于其子节点。堆排序的过程包括构建初始堆和调整堆。首先,将无序...

    数据结构归并排序问题

    关于序列的归并排序,涉及到序列的长度

    数据结构排序算法汇总包-直接插入排序 折半插入排序 2—路插入排序 表插入排序 希尔排序 起泡排序 快速排序 简单选择排序 树形选择排序 堆排序 归并排序链式基数排序

    实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...

    数据结构 排序算法之归并排序

    数据结构是计算机科学中的核心概念,它涉及到如何高效地存储和组织数据,以便进行各种操作。其中,排序算法是数据结构领域的一个重要分支,它的目标是将无序的数据序列整理成有序序列。归并排序(Merge Sort)是一种...

    数据结构 VC实现 归并排序

    ### 数据结构 VC实现 归并排序 #### 一、归并排序原理介绍 归并排序是一种采用分治法策略的高效排序算法。其核心思想是将待排序的序列分为尽可能相等的两部分,分别对这两部分进行排序,然后将排好序的两部分合并...

    数据结构中的归并排序

    数据结构中的内部排序法 归并排序 非常的好用

    数据结构-归并排序

    数据结构-归并排序 PPT文档

    归并排序,排序等算法,数据结构,快速排序,链表排序

    本主题将深入探讨四种常见的排序算法:归并排序、快速排序以及与链表相关的排序方法。 首先,我们来讨论归并排序(Merge Sort)。这是一种基于分治策略的排序算法。归并排序将大问题分解为小问题,然后逐步合并这些...

    数据结构:归并排序

    **归并排序是一种高效...通过理解归并排序的工作原理和C语言实现的细节,你可以更好地掌握数据结构中的排序算法,并在实际编程中灵活应用。无论是在学习阶段还是在实际开发中,掌握这种高效的排序方法都是非常有益的。

    数据结构 排序习题及答案

    ### 数据结构之排序知识点解析 #### 一、题目背景与要求概述 本次解析的主题围绕着一个具体的排序场景:已知有8个初始归并段,它们的长度分别为10、20、25、30、45、12、16、2,现在需要用三条磁带(T0、T1、T2)...

    数据结构中的 内部排序(插入排序 交换排序 选择排序 归并排序 基数排序)

    数据结构中的内部排序是计算机科学中处理数据组织的关键技术之一,它涉及将一组数据元素按照特定的顺序(通常是升序或降序)排列。本文主要介绍了五种内部排序算法:插入排序、交换排序、选择排序、归并排序和基数...

    归并排序 数据结构

    - **时间复杂度**:归并排序的时间复杂度为O(n log n),无论输入数据的初始顺序如何,这个复杂度始终保持不变,因此对于大数据集非常高效。 - **空间复杂度**:由于需要额外的空间来存储子数组,在合并过程中,归并...

    数据结构排序算法演示系统

    《数据结构排序算法演示系统详解》 在计算机科学领域,数据结构与排序算法是至关重要的基础知识,它们直接影响到程序的效率和性能。本文将详细解析“数据结构排序算法演示系统”,探讨其中蕴含的多种排序算法及其原...

    北京工业大学 数据结构与算法 (电控学院) 第三章排序实验 快速排序 归并排序 基数排序

    2.归并排序;3.基数排序。 北工大电控学院《数据结构与算法》课程的其它章节实验及作业程序代码亦已在本站上传,需要的同学可进入作者的空间或通过搜索获取。本代码为上传者原创,仅供个人学习参考使用,请勿自行在...

    数据结构-归并排序.doc

    在数据结构-归并排序的实验中,重点是理解和实现二路归并排序算法,以及递归地处理数组的拆分和归并过程。** ### 1. 算法原理 归并排序的基本思想是将待排序的数据分成两个子序列,每个子序列都是有序的,然后将这...

    归并排序 经典数据结构算法

    ### 归并排序:经典数据结构算法 #### 算法概述 归并排序是一种经典的、高效的基于比较的排序算法,其基本思想是采用分治法(Divide and Conquer)。该算法首先将待排序的序列分成若干个子序列,每个子序列都是...

Global site tag (gtag.js) - Google Analytics