上次我们说到二叉树排序比较,给出如下的题目

题目:创建五万个随机数,然后用分别用冒泡法,选择法,二叉树3种排序算法进行排序,比较哪种更快

废话不说直接上源码,可以看控制台结果

注意的是

需要我们需要上一篇中的Node.java 有需要的同学可以参考java中级——集合框架【2】-二叉树

package cn.jse.node;

import java.util.Arrays;

import java.util.List;

public class SortCompare {

public static void main(String[] args) {

//初始化随机数(new 一个长度为total的nums数组)

int total=50000;

int[] nums = new int[total];

for(int i=0;i<nums.length;i++){

nums[i] = (int)(Math.random()*total);

}

System.out.println("已经初始化50000随机数的数组,我们将会使用3中方法进行排序");

int[] mysort;

mysort=Arrays.copyOf(nums, nums.length);

int[] sortBySelection = performance(new SelectionSort(mysort),"选择排序法");

mysort=Arrays.copyOf(nums, nums.length);

int[] sortByBubbling = performance(new BubblingSort(mysort),"冒泡排序法");

mysort=Arrays.copyOf(nums, nums.length);

int[] sortByTree = performance(new TreeSort(mysort),"二叉树排序法");

}

interface Sort{

void sort();

int[] values();

}

//选择法

static class SelectionSort implements Sort{

int numbers[];

SelectionSort(int[] numbers){

this.numbers = numbers;

}

@Override

public void sort() {

// TODO Auto-generated method stub

for(int j=0; j<numbers.length-1;j++){

for(int i=0;i<numbers.length;i++){

if(numbers[i]<numbers[j]){

int temp = numbers[j];

numbers[j] = numbers[i];

numbers[i] = temp;

}

}

}

}

@Override

public int[] values() {

// TODO Auto-generated method stub

return null;

}

}

//冒泡排序

static class BubblingSort implements Sort{

int numbers[];

BubblingSort(int [] numbers){

this.numbers = numbers;

}

@Override

public void sort() {

for (int j = 0; j < numbers.length; j++) {

for (int i = 0; i < numbers.length-j-1; i++) {

if(numbers[i]>numbers[i+1]){

int temp = numbers[i];

numbers[i] = numbers[i+1];

numbers[i+1] = temp;

}

}

}

}

@Override

public int[] values() {

// TODO Auto-generated method stub

return numbers;

}

}

//二叉树排序

static class TreeSort implements Sort{

int numbers[];

Node n;

TreeSort(int [] numbers){

n =new Node();

this.numbers = numbers;

}

@Override

public void sort() {

for (int i : numbers) {

n.addData(i);

}

}

@Override

public int[] values() {

return null;

}

}

private static int[] performance(Sort algorithm, String type) {

long start = System.currentTimeMillis();

algorithm.sort();

int sortedNumbers[] = algorithm.values();

long end = System.currentTimeMillis();

System.out.printf("%s排序,一共耗时 %d 毫秒%n",type,end-start);

return sortedNumbers;

}

}

java中级——二叉树比较冒泡和选择排序的更多相关文章

  1. 基于python语言的经典排序法(冒泡法和选择排序法)

    前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 ...

  2. Java中的经典算法之选择排序(SelectionSort)

    Java中的经典算法之选择排序(SelectionSort) 神话丿小王子的博客主页 a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟 ...

  3. java面试准备之基础排序——冒泡与选择排序

    选择排序:     [java]    public void select(int[] arr){            for(int i=0;i<arr.length;i++){      ...

  4. Java基础【冒泡、选择排序、二分查找】

    冒泡排序的思路就是前一个和后一个进行比较,如果大的就交换位置   大的数字后浮 如   12      8    5     31 第一轮   8   5   12   31 第二轮   5   8 ...

  5. AJPFX:学习JAVA程序员两个必会的冒泡和选择排序

    * 数组排序(冒泡排序)* * 冒泡排序: 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处* * 选择排序 : 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现 ...

  6. java学习之数组排序一:选择排序

    在讲完java中数组定义的两种方式之外,这里需要讲一下对数组常用的方法,第一个就是排序. 加入我们现在有个数组:int[] arr = {12,87,34,3,98,33,103}; 思路1: 1.首 ...

  7. 我在北京找工作(二):java实现算法<1> 冒泡排序+直接选择排序

    工作.工作.找工作.经过1个多星期的思想斗争还是决定了找JAVA方面的工作,因为好像能比PHP的工资高点.呵呵 :-)  (其实我这是笑脸,什么QQ输入法,模拟表情都没有,忒不人性化了.) 言归正传, ...

  8. [c/c++] programming之路(14)、数组+冒泡和选择排序

    一.数组的基本知识 #include<stdio.h> #include<stdlib.h> void main0(){ ]={,,,,};//数组在内存里是连续排列的 int ...

  9. StringBuffer、StringBuilder、冒泡与选择排序、二分查找、基本数据类型包装类_DAY13

    1:数组的高级操作(预习) (1)数组:存储同一种数据类型的多个元素的容器. (2)特点:每个元素都有从0开始的编号,方便我们获取.专业名称:索引. (3)数组操作: A:遍历 public stat ...

随机推荐

  1. 6.05-btc

    import requests from lxml import etree import json class BtcSpider(object): def __init__(self): self ...

  2. P1182 数列分段`Section II`(贪心+二分, 好题)

    这道题让我见识了二分的新姿势.本来,我是二分的位置的. 思路:直接二分答案x, 关键是检验函数的写法: 先用前缀和 a[i....], 看满足多少段满足 a[ j ]-a[ i ]<=x; 的注 ...

  3. 005_python中的构造函数和析构函数

    python中的特殊方法,其中两个,构造函数和析构函数的作用: 比说“__init__”这个构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这 ...

  4. camke使用例程

    1 同文件夹直接编译 1 同文件夹直接编译 # cmake needs this line cmake_minimum_required(VERSION 2.8) # Define project n ...

  5. lelnet爱一直在

    [root@elk3 ~]# telnet 192.168.122.135 22 Trying 192.168.122.135... 这意味着telnet 没有收到任何回应来建立连接.有两个可能的原因 ...

  6. python3 练习题 day03

    ''' 1. 文件a1.txt内容 序号 部门 人数 平均年龄 备注 1 python 30 26 单身狗 2 Linux 26 30 没对象 3 运营部 20 24 女生多 ....... 通过代码 ...

  7. 给ubuntu换内核

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 下载内核源码 有两种方式,一种方式是直接从官网:https://www.kernel.org/直接下载,另一种方 ...

  8. Oracle 取前几条记录

    今天看了篇文章,对oracle取前几条数据的方式和说明,总结比较全,学习了,做个记录点.oracle 取前10条记录 以下内容是原始文章内容,用于做留存阅读. 1.oracle 取前10条记录 1) ...

  9. WebApi测试工具:SAEA.RESTED

    写好一个Api接口不知道怎么测试?试试SAEA.RESTED吧——无需任何代码.不污染主项目.快速上手.不依赖IIS,可供多人共享使用!下面就跟着本文查看如何使用吧:1.下载安装:https://gi ...

  10. 联合索引在B+树上的结构

    一级索引 二级联合索引 假设这是一个多列索引(col1, col2,col3),对于叶子节点,是这样的:  PS:该图改自<MySQL索引背后的数据结构及算法原理>一文的配图. 也就是说, ...