zoukankan      html  css  js  c++  java
  • 归并排序

    归并排序详解

    归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
    在讲归并排序前,先看一看合并排序吧。
    合并排序顾名思义就是合并,将讲两个数组合并到一个数组的排序方式。简单的讲就是对两个已经进行排序的数组进行合并到第三个数组。比较两个数组的元素的大小,将小的一个录入第三个数组,一次一次比较。当一个数组没有元素后,直接将另一个数组直接移到第三个素组就行了。
    代码如下:

    void memerarray(int a[],int n,int b[],int m,int c[])
    {
        int i=0,j=0,k=0;
        while(i<n&&j<m)
        {
            if(a[i]<b[j])
                c[k++]=a[i++];
            else
                c[k++]=b[j++];
        }
        while(i<n)
            c[k++]=a[i++];
        while(j<m)
            c[k++]=b[j++];
    }

    合并排序排序是在已知有序序列的情况下进行合并,当序列无序呢?
    接下来进行归并排序,去解决这个问题。

    void memerarry(int a[],int first,int mid,int last,int b[])
    {
        int i=first,j=mid+1;
        int n=mid,m=last;
        int k=0;
        while(i<=n&&j<=m)
        {
            if(a[i]<a[j])
                b[k++]=a[i++];
            else
                b[k++]=a[j++];
        }
        while(i<=n)
        {
            b[k++]=a[i++];
        }
        while(j<=m)
            b[k++]=a[j++];
        for(int i=0;i<k;i++)
            a[first+i]=b[i];
    }
    void mergesort(int a[],int first,int last,int b[])
    {
        if(first<last)
        {
            int mid=(first+last)/2;
            mergesort(a,first,mid,b);
            mergesort(a,mid+1,last,b);
            memerarry(a,first,mid,last,b);
        }
    }

    归并排序效率是比较高的。

  • 相关阅读:
    在路上(转)
    我,机器
    梧桐道上
    傅盛:如何快慢“炼”金山?(转)
    [JS]笔记15之客户端存储cookie
    [JS]笔记14之事件委托
    [JS]笔记13之Date对象
    将博客搬至CSDN
    [JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播
    [JS]笔记11之正则表达式
  • 原文地址:https://www.cnblogs.com/nanfenggu/p/7900098.html
Copyright © 2011-2022 走看看