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

题目:创建五万个随机数,然后用分别用冒泡法,选择法,二叉树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. 让你提前认识软件开发(21):C程序中的定时器

    版权声明:本文为博主原创文章.对文章内容有不论什么意见或建议.欢迎与作者单独交流.作者QQ(微信):245924426. https://blog.csdn.net/zhouzxi/article/d ...

  2. P2678 跳石头(二分+模拟)

    思路: 我觉得我现在有一个非常不好的习惯,那就是不爱画图.当我把这个题的检验函数用图来表示出来.感觉就非常好理解了. 直接说检验函数吧.就是非常简单的模拟,我现在换成角度来说:假设你最小能跳x(不能跳 ...

  3. docker 4 docker的三要素

    docker三要素 镜像,容器,仓库 镜像 docker镜像(image)就是一个只读的模板,镜像可以用来创建docker容器,一个镜像可以创建很多个容器 容器 docker利用容器(containe ...

  4. java kafka单列模式生产者客户端

    1.所需要的依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="ht ...

  5. mysql概述

    MySql大致分为三层结构: 第一层:客户端并非MySql所独有,例如:连接处理.授权认证.安全等功能均在这一层处理 第二层:核心服务包括查询解析.分析.优化.缓存.内置函数(比如 : 时间.数学.加 ...

  6. easyui的浮动panel不跟随所在页面一起滚动的问题

    项目开发中遇到一个很奇怪的现象就是:随便点开一个下拉控件,包括combo,combobox,databox,combogird等等,都会出现点开的panel面板正常,如果页面有滚动条,一用鼠标滚轮滚动 ...

  7. SQL开发规范

    一.SQL代码规范: 1.头部 --************************************************************************** --所属主题: ...

  8. C#理解AutoResetEvent和ManualResetEvent

    当在C#使用多线程时就免不了使用AutoResetEvent和ManualResetEvent类,可以理解这两个类可以通过设置信号来让线程停下来或让线程重新启动,其实与操作系统里的信号量很相似(汗,考 ...

  9. 【php增删改查实例】第二十五节 - 在main.php中显示头像

    在用户成功上传头像以后,用户登录系统,应该能够看到自己的头像,本节演示如何在这个地方: 添加用户头像. 1.用DIV做: border-radius:50% background:url(xxx.jp ...

  10. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 客户端多网络支持

    客户端可以支持灵活的,中间层连接选择,由于我们系统的定位架构大型信息系统的,所以全国各地,甚至国外的用户也会有,所以需要支持全网络配置,只要配置了中间层,可以选择连接哪个中间层的服务程序.客户端可以进 ...