合并排序

原创 2018年04月15日 16:09:32

算法设计

(1)分解---奖待排元素分成大小大致相同的两个子序列。(2)治理---对两个子序列进行合并排序。(3)合并---将排好序的有序子序列进行合并,得到最终的有序序列。

伪代码详解

(1)合并操作

int *B=new int[high-low+1];
int i=low,j=mid+1,k=0;
while(i<=mid&&j<=high)
{
    if(A[i]<=A[j])
        B[K++]=A[i++]
    else
        B[K++]=A[j++];
}

( 2 )递归形式的合并排序算法

void MergeSort(int A[],int low,mid,int high)
{
    if(low<=high){
        int mid=(low+high)/2;
        MergeSort(A,low,mid);
        MergeSort(A,mid+1,high);
        Merge(A,low,mid,high);//合并的算法
    }
}

代码详解

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;

void Merge(int A[],int low,int mid,int high){
int *B=new int[high-low+1];
int i=low,j=mid+1,K=0;
while(i<=mid&&j<=high)
{
    if(A[i]<=A[j])
        B[K++]=A[i++];
    else
        B[K++]=A[j++];
}
while(i<=mid) B[K++]=A[i++];
while(j<=high) B[K++]=A[j++];
for(i=low,K=0;i<=high;i++)
    A[i]=B[K++];
delete []B;
}

void MergeSort(int A[],int low,int high)
{
    if(low<=high){
        int mid=(low+high)/2;
        MergeSort(A,low,mid);
        MergeSort(A,mid+1,high);
        Merge(A,low,mid,high);//合并的算法
    }
}

int main()
{
    int n,A[100];
    cout<<"请输入数列中的元素个数n为:"<<endl;
    cin>>n;
    cout<<"请依次输入数列中的元素:"<<endl;
    for(int i=0;i<n;i++)
        cin>>A[i];
    MergeSort(A,0,n-1);
    cout<<"合并排序结果:"<<endl;
    for(int i=0;i<n;i++)
        cout<<A[i]<<" ";
    cout<<endl;
    return 0;
}


VB 合并排序

  • 2010年06月07日 14:10
  • 38KB
  • 下载

常用排序算法--合并排序和快速排序

常用排序算法——合并排序 常用排序算法合并排序 分治 合并排序和快速排序 快速排序的递归实现 合并排序的递归实现 合并排序的非递归实现分治分治(Divide and Conquer)是一场常见的算法策...
  • u014532901
  • u014532901
  • 2016-09-30 16:42:17
  • 1705

合并排序的递归实现算法

合并排序的递归实现算法题目描述: Java实现:import java.util.Random; import java.util.Scanner;public class MergeSort ...
  • whl_program
  • whl_program
  • 2017-06-20 17:19:41
  • 265

冒泡排序与合并排序的时间复杂度比较

  • 2012年12月17日 21:01
  • 187KB
  • 下载

合并排序详解

看到一篇很详细的文章,将原文照抄如下:—————————————————————————————————————–—————————————————————————————————————–文章作者:...
  • khwkhwkhw
  • khwkhwkhw
  • 2016-04-26 21:37:45
  • 1416

【算法设计与分析】4、合并排序

/** * 书本:《算法分析与设计》 * 功能:给定线性序列集合中n个元素和一个整数k,1...
  • cutter_point
  • cutter_point
  • 2014-11-16 18:41:43
  • 1139

归并排序递归及非递归实现(自然合并排序)

一:归并排序 普通的归并排序递归实现比较简单,就不在此赘述,一看就懂。下面贴上代码。 #include using namespace std; template void merge(T ar...
  • FreeeLinux
  • FreeeLinux
  • 2016-09-29 19:07:10
  • 2232

分治算法之合并排序

分治算法的基本思想是将一个规模为n的问题分解成k个规模较小的子问题,这些子问题相互独立并且与原问题相同。先递归的解决这些子问题,然后再将各个子问题的解合并到原问题的解当中。 合并排序算法是用分治...
  • ccj2020
  • ccj2020
  • 2012-08-06 16:56:48
  • 874

合并排序递归和非递归算法

  • 2012年06月08日 19:55
  • 2KB
  • 下载
收藏助手
不良信息举报
您举报文章:合并排序
举报原因:
原因补充:

(最多只允许输入30个字)