java实现归并排序和树形排序(锦标赛制):java字符串分隔或的形式

String[] b=str.split("query|,");//query分隔或者逗号分隔

归并排序,递归实现
public class MergeSort2 {
// 对data数组中的 [a,b) 区间的数据进行归并排序,
// 排序结束后,[a,b)间数据处于升序有序状态
static void mergeSort(int[] data, int a,int b)
{
if (a >= b) return;
int mid=(a+b)/2;//拆分排序
mergeSort(data,a,mid);

mergeSort(data,mid+1,b);

//前面两个拍好了或者只有个一个元素时执行下面
merge(data,a,mid,b);
}
// data中的数据, [low,mid), [mid,high) 是两段待归并数据。归并后,[low,high) 整体有序
static void merge(int[] data, int low,int mid,int high)
{
int[] tmp = new int[high-low+1];
int[] a=new int[mid-low+1];

int[] b=new int[high-mid];

//给两半数组赋值
for (int i = 0; i < a.length; i++) {
a[i]=data[low+i-1];
}
for (int i = 0; i < b.length; i++) {
b[i]=data[mid+i];
}
int ai=0;//只要能表达其位置的都可以称为指针,不一定是指向内存地址,C可能是指向内存地址
int bi=0;
int ci=0;
while (ai<a.length&&bi<high-mid) {
//谁小就先添加谁
if (a[ai]<=b[bi]) {
tmp[ci++]=a[ai++];
}
else {
tmp[ci++]=b[bi++];
}
}
//判断剩余,将剩余的添加到尾部
while (ai<a.length)tmp[ci++]=a[ai++];

while (bi<b.length)tmp[ci++]=b[bi++];

//把排好的值赋给数组
int i=0;

int k=low-i-1;
while (i<ci) {
data[k++]=tmp[i++];

}
}

//上面的操作针对数组,所以数组发生了变化,若是变量,只是在方法中改变值,出了方法值不变,除非设成引用类型
public static void main(String[] args) {
int[] a = { 26, 29, 60, 60, 11, 15, 20, 75, 100, 500, 1000, 3, 5, 6, 8,9 };
//int[] a={3,2,1};
mergeSort(a, 1,a.length);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}

}

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/

树形排序

public class TreeSort {
public static int[] treeAgain(int[] a) {
// 树排序挺浪费空间的,数值16个,排序完全二叉树,需要31个节点
int[] allCode = new int[2 * a.length - 1];
for (int i = allCode.length - 1; i >= 0; i--) {
if (i - a.length + 1 >= 0) {
allCode[i] = a[i - a.length + 1];
} else {
if (allCode[i * 2 + 1] <= allCode[i * 2 + 2]) {
allCode[i] = allCode[i * 2 + 1];
} else {
allCode[i] = allCode[i * 2 + 2];
}
}
}
return allCode;
}

public static void treeSort(int[] a) {
int allCode[] = null;
while (true) {

//重新赋值后再排序
allCode = treeAgain(a);
if (allCode[0]==Integer.MAX_VALUE) {
break;
}
System.out.print(allCode[0] + " ");
for (int i = 0; i < a.length; i++) {
if (a[i] == allCode[0]) {
a[i] = Integer.MAX_VALUE;
}
}

}
//树形显示
/*
 * int n = 1;
 *
 * for (int i = 0; i < allCode.length; i++) {
 * System.out.print(allCode[i] + " ");
 *
 * int x = (int) Math.pow(2, n) - 2; if (i == x) { System.out.println();
 * n++; }
 *
 * }
 */

}

/**
 * @param args
 */
public static void main(String[] args) {
int[] a = { 26, 29, 60, 60, 11, 15, 20, 75, 100, 500, 1000, 3, 5, 6, 8,
9 };

treeSort(a);

}

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, 字符串排序
, int
, 数据
, 排序
, data
, java 排序
, 排序java
, java排序赋值
, java 排序
, mid
, Java排序
, 归并排序c语言
java字符串分隔符
,以便于您获取更多的相关知识。

时间: 2024-10-30 02:22:38

java实现归并排序和树形排序(锦标赛制):java字符串分隔或的形式的相关文章

java常用的7大排序算法汇总

这段时间闲了下来,就抽了点时间总结了下java中常用的七大排序算法,希望以后可以回顾! 1.插入排序算法 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经排好序,本趟需要找到 i 对应的元素 x 的正确位置 k ,并且在寻找这个位置 k 的过程中逐个将比较过的元素往后移一位,为元素 x "腾位置",最后将 k 对应的元素值赋为 x ,一般情况下,插入排序的时间复杂度和空间复杂度分别为 O(n2 ) 和 O(1). /**  * @param

java 排序-java中插入排序和选择排序哪个速度快

问题描述 java中插入排序和选择排序哪个速度快 我在电脑随机生成了100000个数,但是算时间的时候,发现选择排序只用了3秒,插入排序用了8秒,冒泡排序用了19秒.因为刚自学,看到视频里说是插入排序快于选择排序.怎么实践出来不是哒? 解决方案 插入排序和选择排序都是O(n*n),算法复杂度一样,你看的什么视频? 至于具体的程序,算法复杂度一样的情况下,具体代码的差异.数据量,样本本身(完全无序.倒序.有序)等决定了谁快谁慢,但是在数量级上是一样的. 冒泡复杂度为O(n*n).当数据为正序,将不

java实现归并排序算法_java

归并排序就是将未排序的数组进行对半划分成两个数组,划分后的数组只有原来数组的一半数量的元素.然后在对划分的两个数组再继续划分,循环此操作,直到划分的数组中只有一个元素时停止划分,然后对于划分完成的数组进行归并排序操作.将两个已经划分完成的数组合并成一个有序的数组,直到最后合并成一个包含所有元素的数组,合并排序操作完成.下面以图形来演示下归并排序的过程. 假设有一个未排序数组:{3,2,4,1},下面为数组的划分过程,先将数组对半划分为{3,2}和{4,1}两个数组.然后在对这两个数组进行划分最后

排序算法的Java实现全攻略_java

Collections.sort() Java的排序可以用Collections.sort() 排序函数实现. 用Collections.sort方法对list排序有两种方法: 第一种是list中的对象实现Comparable接口,如下: /** * 根据order对User排序 */ public class User implements Comparable<User>{ private String name; private Integer order; public String

排序算法的Java实现

下面是几种排序的用Java的实现: 冒泡排序 public class BubbleSortDemo { /**//* * 从前到后扫描序列,比较相邻的两个元素大小,若发现逆序则交换位置 , * 使最大的达到序列的最后位置.然后再从后到前扫描剩下的序列,如此 . * 当数列有序后不再继续循环 */ private void bubbleSort(int[] numlist) { int in,out,temp; boolean flag = false; //从后到前,从最后一项开始到第二项扫描

java datatable中怎么做排序编号!

问题描述 java datatable中怎么做排序编号! 我现在需要在excel行号前面加一列编号,并且按顺序来排列!例如1.2.3.4..... 解决方案 你用的是什么数据库?现在几个主流的数据库都有ROWNUM 或者参考How to display dataTable row numbers in JSF这篇文章和源码是否对你有帮助.

java中输出一个日期排序,输出格式怎么变成Date@2c905b34类似的了。。请大神指点

问题描述 java中输出一个日期排序,输出格式怎么变成Date@2c905b34类似的了..请大神指点 java中输出一个日期排序,输出格式怎么变成Date@2c905b34. Date@3953c9c7类似的格式了..请大神指点 : Date[] days = new Date[5]; days[0] = new Date(2012123); days[1] = new Date(201515); days[2] = new Date(2008123); days[3] = new Date(

Java集合框架实现自定义排序

Java集合框架针对不同的数据结构提供了多种排序的方法,虽然很多时候我们可以自己实现排序,比如数组等,但是灵活的使用JDK提供的排序方法,可以提高开发效率,而且通常JDK的实现要比自己造的轮子性能更优化. 1.使用Arrays对数组进行排序 Java API对Arrays类的说明是:此类包含用来操作数组(比如排序和搜索)的各种方法. (1)使用Arrays排序 Arrays使用非常简单,直接调用sort()即可: 1 2 3 4 5 6 7 8 9 10 11 int[] arr = new i

浅谈Java之Map 按值排序 (Map sort by value)_java

Map是键值对的集合,又叫作字典或关联数组等,是最常见的数据结构之一.在java如何让一个map按value排序呢? 看似简单,但却不容易! 比如,Map中key是String类型,表示一个单词,而value是int型,表示该单词出现的次数,现在我们想要按照单词出现的次数来排序: Map map = new TreeMap(); map.put("me", 1000); map.put("and", 4000); map.put("you", 3