二路归并排序 代码实例

  感觉好久没有写排序程序了,C语言有qsort()函数,C++有sort()函数,java语言有Arrays类(主要这个不是Array)。今天写了一下归并排序还有点费劲呀。晚上回来写写。

  归并排序就是采用分治法进行排序:

  (1)将一个数组分成小的2个数组分别进行排序;

  (2)之后将分出来的已经拍好序的数组进行合并;

晚上写的java二路归并排序代码如下:

import java.util.Scanner;
public class MergeSort {
    int[] a=null;
    int[] b=null;
    int n;
    Scanner sin=null;

    MergeSort()
    {
        a=new int[10000];
        b=new int[10000];
        sin=new Scanner(System.in);
    }

    void sort(int start,int end)    //排序a[start...end]
    {
        int mid;
     if(start >= end)    //只有一个元素的时候,直接返回
            return ;
        else
        {
            mid=(end-start)/2;    //将元素分成两半,分别排序
            sort(start,start+mid);
            sort(start+mid+1,end);

            //归并两个有序的数组a[start...start+mid]和a[start+mid+1...end]
            merge(start,start+mid,end);
        }
    }

    void merge(int start,int mid,int end)    //归并
    {
        int t=start;
        int i=start,j=mid+1;
        while(i<=mid && j<=end)
        {
            if(a[i]<a[j])
                b[t++]=a[i++];
            else
                b[t++]=a[j++];
        }
        while(i<=mid)
            b[t++]=a[i++];
        while(j<=end)
            b[t++]=a[j++];

        for(i=start;i<=end;i++)    //排序后的内容写回a数组的相应位置去
            a[i]=b[i];
    }

    void run()
    {
        System.out.print("输入要排序的数的个数:");
        n=sin.nextInt();
        for(int i=0;i<n;i++)
            a[i]=sin.nextInt();
        sort(0,n-1);
        System.out.println("排序结果是:");
        //输入要排序的数据
        for(int i=0;i<n;i++)
            System.out.println(a[i]+"  ");
    }

    public static void main(String[] args) {
        new MergeSort().run();
    }
}

 

 

 

时间: 2024-08-24 03:02:47

二路归并排序 代码实例的相关文章

常见的五类排序算法图解和实现(归并类:二路归并排序)

归并类的排序算法 归并:将两个或两个以上的有序表组合成一个新的有序表. 内部排序中,通常采用的是 2-路归并排序.即:将两个位置相邻的记录有序子序列归并为一个记录有序的序列.归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 图解如下 看成是 n 个有序的子序列(长度为 1),然后两两归并. 得到 n/2 个长度为2 或 1 的有序子序列.继续亮亮归并 最后一趟 代码如下: 1 //二路一次归并过程的算法 2 //lo

PHP中codeigniter文件上传类代码实例

  codeigniter文件上传类代码实例 文件上传类 CodeIgniter 的文件上传类允许文件被上传.您可以设置指定上传某类型的文件及指定大小的文件. 处理过程 上传文件普遍的过程: 一个上传文件用的表单,允许用户选择一个文件并上传它. 当这个表单被提交,该文件被上传到指定的目录. 同时,该文件将被验证是否符合您设定的要求. 一旦文件上传成功,还要返回一个上传成功的确认窗口. 这里有一个简短的教程来显示这个过程.此后你将会找到相关的参考信息. 创建上传表单 运用文本编辑器创建一个名为up

PHP文件上传功能代码实例教程

在PHP网站开发中,PHP程序如何实现文件上传功能,一直是新手的课题.而且文件上传功能一般都用得着,比如图片上传.今天就结合具体代码实例和详细注解和大家分享如何编写PHP文件上传代码,适合php初学者学习. PHP代码实例主要讲述的是图片上传,看懂程序后你可以修改相关文件类型就可以实现其他文件的上传功能. 编程环境 PHP5.2.4,基本上PHP4.3以上版本,此代码都可以使用 准备工作 检查upload_tmp_dir项 如果PHP的开发环境是自行搭建的,你需要在编写文件上传程序前编辑php.

php判断ip黑名单程序代码实例

 这篇文章主要介绍了php判断ip黑名单程序代码实例,需要的朋友可以参考下 学校的新闻系统要求有些新闻只开放校内ip浏览,于是重写了一个代码来实现此功能,实现后的结果是,只要把允许访问的ip列入ip.txt这个文件中即可,同时支持c类ip,例如:   ip.txt 192.168 211.67.188 211.67.191.25 代码如下:    代码如下: /* * ip地址黑名单.白名单 * 判断访客地址的ip是否在ip.txt中,支持c类ip * By xhat */   $ip = $_

网页最简短的拖动对象代码实例演示

对象|网页 以前在网上看到的最简单的拖动对象的代码,忘记作者叫什么了.原始代码在IE下有些小问题,并且声明了文档类型为xhtml 1.0后,在FF等非IE浏览器下无效,对其进行了改进,现在已经可兼容:IE.Firefox.Opera ... 以下代码只是演示原理,具体应用请结合你自己的实际需求进行修改.  <!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/T

滑动展开/收缩广告代码实例效果

广告 功能说明: 滑动展开/收缩广告效果,可指定:广告完全展开时的停留时间,最大高度 兼容浏览器: IE5.0+.FF1.06+.Opera8.0+ 实例代码:  <!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="htt

python模块:textwrap 文本包装和填充的代码实例

代码实例: sample_text = ''' The textwrap module can beused to format text for output in situations wherepretty-printing is desired.  It offers programmatic functionalitysimilar to the paragraph wrapping or filling features found inmany text editors. '''

Apache Kafka的代码实例

前提: 已经配置好kafka.若未安装,可以参照[Apache Kafka]安装升级指南 已在eclipse里面安装scala插件.Eclipse Kepler中在Help->Eclipse Markectplace中搜索Scala,然后安装即可. 使用maven构建kafka测试project在eclipse中. 创建topic:在kafka的安装目录下执行bin/kafka-create-topic.sh --zookeeper 192.168.20.99:2181 --replica 1

JavaScript数组去重的3种方法和代码实例

  这篇文章主要介绍了JavaScript数组去重的3种方法和代码实例,本文直接给出实例代码,需要的朋友可以参考下 数组去重的方法有很多,到底哪种是最理想的,自己不清楚.于是自己测试了下数组去重的效果和性能.测试十万个数据,代码和所耗大概时间如下. 到底采用哪种方法,根据实际情况而定吧. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 3