`
come_for_dream
  • 浏览: 120377 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

归并排序的算法实现

 
阅读更多



                               归并排序的算法实现

归并排序的基本思想是:

         将待排序元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。

        算法:

          1.把待排序的n个记录看作长度为1的有序序列,将相邻的子序列两两归并为长度为2或1的有序序列

           2.把得到的n/2个长度为2的有序序列再归并为长度为2*2的有序序列

           3.按照2的方式,重复对相邻的有序子序列进行归并操作,直到成为一个有序序列为止。

排序以一下方式进行:

 一下是我的算法实现:


 

public void merge_sort(int[]data,int left,int right){
		
		if(left<right){
			int mid=(left+right)/2;
			//递归调用将数组分组,将数组分成n个记录
			merge_sort(data, left, mid);
			merge_sort(data, mid+1, right);
			
			//将被分开的数组进行排序,合并
			merge(data,left,mid,right);
		}
	}
	private void merge(int[] data, int left, int mid, int right) {
		int i=0,k=0;  
		//用于控制合并过程时下标的处理
		int begin1=left,end1=mid,begin2=mid+1,end2=right;
		//用于存放数据
		int []temp=new int[right-left+1];
		//开始比较赋值
		while(begin1<=end1&&begin2<=end2){
			//依次比较两个排好序的子序列,最初两个子序列中最小元素放入临时数组
			if(data[begin1]<data[begin2]){
				temp[k]=data[begin1];
				begin1++;
			}
			else{
				temp[k]=data[begin2];
				begin2++;
			}
			k++;
		}
		
		//如果一个子序列已经完全放入临时数组,将剩余部分的数组放入临时数组
		while(begin1<=end1){
			temp[k++]=data[begin1++];
		}
		while(begin2<=end2){	
			temp[k++]=data[begin2++];	
		}
		
	
		  //将排好序的临时数组拷贝到原始数组
		k=0;
		for(i=left;i<=right;i++){
			data[i]=temp[k++];
		}
		
		
		
		
	}

 

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

相关推荐

    归并排序算法实现

    ### 归并排序算法实现详解 #### 一、引言 归并排序是一种经典的排序算法,采用分治法的思想,将待排序数组分为若干个子序列,这些子序列是已排序的,然后再按照一定的方式合并这些子序列得到最终排序后的数组。...

    归并排序算法实现(排序算法系列1)

    归并排序是一种高效的、稳定的排序算法,由著名计算机科学家John W. Backus在1946年提出。它是基于分治策略的一种经典算法,适用于处理大量数据。在本系列的第一部分,我们将深入探讨归并排序的基本原理、实现过程...

    归并排序算法代码实现

    这是关于归并排序算法用C语言实现的代码,是经过测试正确的,希望能对大家的学习有所帮助。

    可视化展示归并排序算法实现效果

    归并排序是一种经典的排序算法,基于“分治”策略。它的基本思想是将大问题分解成小问题,然后逐个解决这些小问题,最后再合并这些小问题的解,得到原问题的解。在归并排序中,我们将一个大的数组分割成两个或更多的...

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

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

    四种算法实现排序

    这里我们将详细讨论四种常见的排序算法:冒泡排序、简单选择排序、归并排序和堆排序,以及它们在C#语言中的实现。 1. **冒泡排序**: 冒泡排序是一种简单的交换排序,它通过不断比较相邻元素并交换位置来逐步排序...

    C++实现希尔、快速、堆排序、归并排序算法

    本文将详细介绍C++中实现的希尔排序、快速排序、堆排序和归并排序这四种经典排序算法。 希尔排序,由Donald Shell于1959年提出,是一种改进的插入排序。它的基本思想是通过设置一个增量序列,将待排序的元素按照...

    数据库系统实现-两阶段多路归并排序算法的C实现

    总的来说,两阶段多路归并排序算法是数据库系统中实现高效排序的关键技术之一。通过理解其原理和C语言的实现,开发者能够更好地优化数据库查询性能,提高系统整体效率。对于学习数据库系统实现的读者来说,这个实验...

    C语言用分治法实现数组归并排序算法实现

    归并排序的过程是,将数组分为许多的组,即将数组元素多的数组分为数组元素少的数组,然后再将其合并。它的优点是,同时对多个数据进行对比排序,归并排序是分治法的典型应用。 分:体现在将数组分为小数组。 治:对...

    C语言二路归并排序算法

    通过上述代码,我们实现了二路归并排序算法。该算法具有很好的稳定性和时间复杂度 O(nlogn),适用于大规模数据的排序场景。在实际应用中,可以根据具体需求调整辅助数组的位置以及优化合并过程,进一步提高效率。

    归并排序算法(计算机算法与分析)

    在题目描述中,我们看到了对归并排序算法的实现要求。首先,要使用递归技术,观察并输出每次的`low`、`mid`和`high`的变化,同时记录递归深度。这意味着我们需要在递归调用过程中追踪数组的划分过程。递归函数`...

    MATLAB实现插入排序、二分归并排序、归并排序.rar

    在本资源中,我们主要关注的是使用MATLAB编程语言实现三种经典的排序算法:插入排序、二分归并排序以及归并排序。这些算法是计算机科学基础中的重要组成部分,特别是在算法设计与分析领域。MATLAB是一种强大的数值...

    归并排序算法C语言实现

    完整的实现了归并排序的算法,使用C语言实现,相信看过本程序之后,会对归并排序了如指掌

    分治法实现归并排序算法算法设计与分析实验报告.docx

    **实验报告:分治法实现归并排序算法** 实验名称:分治法实现归并排序算法 实验日期:年月日 姓名: 学号: 专业班级: ### 一、实验要求 1. **理解分治法**:分治法是一种解决问题的策略,适用于将大问题分解成...

    快速排序与归并排序的算法比较实验报告

    **快速排序与归并排序算法比较实验报告** 在计算机科学中,排序算法是处理大量数据时不可或缺的一部分。这篇实验报告将深入探讨两种经典的排序算法——快速排序和归并排序,通过对它们在Java环境中的实现和性能测试...

    一个 c c++写的归并排序算法

    根据给定的信息,本文将详细解释归并排序算法在C/C++中的实现方式,并尝试从提供的部分代码片段中解析可能存在的逻辑与应用场景。 ### 归并排序算法简介 归并排序是一种采用分治策略(Divide and Conquer)的排序...

Global site tag (gtag.js) - Google Analytics