归并排序-JAVA实现
package com.iloveu.xxx;
public class MergeSort {
static final int SIZE = 15;
static void mergeOne(int a[],int b[],int n,int len)
{
int i,j,k,s,e;
s=0;
while(s+len<n){
e = s+2*len-1;
if(e>=n){//最后一段可能少于len个节点
e = n -1;
}
//相邻有序段合并
k=s;
i=s;
j=s+len;
while(i<s+len && j<=e){//如果两个有序表都未结束时,循环比较
if(a[i]<=a[j]){//如果较小的元素复制到数组b中
b[k++]=a[i++];
}else{
b[k++]=a[j++];
}
}
while(i<s+len){//未合并的部分复制到数组b中
b[k++]=a[i++];
}
while(j<=e){//未合并的部分复制到数组b中
b[k++]=a[j++];
}
s=e+1;//下一对有序段中左段的开始下标
}
if(s<n){//将剩余的一个有序段从数组a中复制到数组b中
for(;s<n;s++){
b[s] = a[s];
}
}
}
static void mergeSort(int a[],int n)//合并排序
{
int h,count,len,f;
count = 0;//排序步骤
len = 1;//有序序列的长度
f = 0;//变量f作标志
int[] p = new int[n];
while(len<n){
if(f==1){//交替在a和p之间合并
mergeOne(p,a,n,len);//p合并到a
}else{
mergeOne(a,p,n,len);//a合并到p
}
len = len*2;//增加有序序列长度
f=1-f;//使f值在0和1之间切换
count++;
System.out.printf("第"+count+"步排序结果:");//输出每步排序的结果
for(h=0;h<SIZE;h++){
System.out.printf(" "+a[h]);
}
System.out.printf("\n");
}
if(f==1){//如果进行了排序
for(h=0;h<n;h++){//将内存p中的数据复制回数组a
a[h]=p[h];
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] shuzu=new int[SIZE];
int i;
for(i=0;i<SIZE;i++){
shuzu[i] = (int) (100+Math.random()*(100+1));//初始化数组
}
System.out.print("排序前的数组为:\n");//输出排序前的数组
for(i=0;i<SIZE;i++){
System.out.print(shuzu[i]+" ");
}
System.out.print("\n");
mergeSort(shuzu,SIZE);//排序操作
System.out.print("排序后的数组为:\n");
for(i=0;i<SIZE;i++){
System.out.print(shuzu[i]+" ");//输出排序后的数组
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.print("\n");
}
}
归并排序-JAVA实现的更多相关文章
- 归并排序 求逆序数 链表的归并排序 多线程归并排序 java
import java.util.Scanner; public class Main { private static int count=0; public static void mergeso ...
- 二路归并排序java实现
二路归并排序:其核心思想时将问题一分为二,并递归调用一分为二方法,使问题分割到不能再分各的原子问题,然后再归并,从实现原子问题开始,层层向上归并,最终解决整体问题.即所谓“分而治之,万流归一” 二路归 ...
- 自顶向下(递归)的归并排序和自底向上(循环)的归并排序——java实现
归并排序有两种实现方式,自顶向下和自底向上.前者的思想是分治法,现将数组逐级二分再二分,分到最小的两个元素后,逐级往上归并,故其核心在于归并.后者的思想相反,采用循环的方式将小问题不断的壮大,最后变成 ...
- 单向链表的归并排序——java实现
在做Coursera上的Algorithms第三周测验练习的时候有一道链表随机排序问题,刚开始没有什么思路,就想着先把单向链表归并排序实现了,再此基础上进行随机排序的改造.于是就结合归并排序算法,实现 ...
- 归并排序-java
排序-归并排序 基本思想:是指将两个或两个以上的有序表合并成一个新的有序表. 具体步骤: (1首先将整个表看成是n个有序子表,每个子表的长度为1. (2)然后两两归并,得到n/2个长度为2的有序子表. ...
- leetcode23 多个拍好序的链表进行归并排序 (java版本)
题目: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexit ...
- 归并排序java
import java.util.Arrays; public class MergeSort { public static void main(String[] args) { MergeSort ...
- 归并排序—Java版
一开始做算法的时候,感觉递归算法很绕,所以我就在阅读别人代码的基础上,对代码每一步都添加自己的注解,方便我以后的学习. public class MergeSort { /** * 归并排序 * @p ...
- 归并排序Java实现
package practice; import edu.princeton.cs.algs4.*; /* * 归并排序 * 时间复杂度O(NlgN) N为数组长度 * 归并排序在小数组上表现并不好可 ...
- 归并排序——Java实现
一.排序思想 将两个或两个以上的一排序文件合并成一个有序文件的过程叫归并,而归并排序就是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用.将以有序的了序列合并,得到完全有序 ...
随机推荐
- keil进阶教程
前言 keil只懂得创建软件工程是远远不够的,如果要想顺心使用,应该要懂得部分配置,这样使用心情顺畅,码代码也会越发高效. 设置字号字体 编辑点击编辑菜单,会出现很多子目录,找到配置,点击进入设置页面 ...
- 一个tomcat设置多个端口,多个端口对应多个应用
修改tomcat/conf目录里面server.xml文件 例如下面这样新增一个8090端口,设置下appBase目录,这样就可以用一个tomcat监听多个端口,每个端口都可以放应用了.我这样新增下面 ...
- java爬虫系列第四讲-采集"极客时间"专栏文章、视频专辑
1.概述 极客时间(https://time.geekbang.org/),想必大家都知道的,上面有很多值得大家学习的课程,如下图: 本文主要内容 使用webmagic采集极客时间中某个专栏课程生成h ...
- centos 7下安装jdk1.8
本篇文章主要介绍在centos7 环境下安装jdk1.8并配置环境变量. 安装步骤 1.下载网址 https://www.oracle.com/technetwork/java/javase/do ...
- HTML中块元素与内联元素的概念
HTML中块元素与内联元素的概念 div就是一个块元素,所谓的块元素就是会独占一行的的元素,无论他的内容有多少,他都会独占一整行. p h1 h2 h3 ... div这个标签没有任何语义,就是一个纯 ...
- Java开发环境的搭建01——Eclipse篇(Windows)
搭建环境是换项目组和新入职的开发入项都必须面临的一件事情,搭搭环境,一天就过去了...本着不浪费生命不做重复的无用功,在这里写写环境搭建的基本功,这篇是介绍Java环境搭建,常见的开发IDE无非就两种 ...
- arcgis api 3.x for js 入门开发系列十七在线天地图、百度地图、高德地图(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- solr8.0 从数据库导入数据(三)
第一步:导入相关包: 在创建的核心目录下新建lib文件夹(如果有,无需建立),从Solr源码包的dist文件夹中导入两个solr-dataimporthandler包,以及一个mysql驱动包. 第二 ...
- Mybatis学习---连接MySQL数据库
[目录]
- 使用PDF.JS实现pdf文件在线预览时,报文件被损坏的错误
首先大概说明一下问题出现的背景:我用PDF.JS实现文件在线预览,参考网上的办法,在jsp文件中使用 <iframe src="<c:url value="js/gen ...