比较冒泡法,选择法以及二叉树排序的性能区别

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

排序:选择排序和冒泡排序

package collection;
  
import java.util.ArrayList;
import java.util.List;
  
public class Node {
    // 左子节点
    public Node leftNode;
    // 右子节点
    public Node rightNode;
    // 节点值
    public Object value;
      
    // 插入数据
    public void add(Object v) {*}
      
    // 中序遍历所有节点,从左到右排列
    public List<Object> values() { *}
      
    public void nums(List<Integer> a){
        // 随机生成4万个数
        for (int i = 0; i <40000; i++) {
            int num = (int) (Math.random()*(999 + 1));
            a.add(num);
        }   
    }
      
    // 冒泡排序
    public void mpNums(List<Integer> a) {
        for (int n = 0; n < a.size(); n++)
                for (int m = 0; m < a.size()-n-1; m++){
                        if (a.get(m) > a.get(m+1)){ 
                            Integer t = a.get(m);
                            a.set(m, a.get(m+1));
                            a.set(m + 1, t);
                            }
                }
    }
      
    // 选择排序
    public void xzNums(List<Integer> a) {
        for (int k = 0;k < a.size(); k++)
            for(int l = k + 1; l < a.size(); l++)
                if (a.get(k) > a.get(l)){ 
                    Integer t = a.get(k);
                    a.set(k, a.get(l));
                    a.set(l, t);
                    }
    }
      
    public static void main(String[] args) {
        Node node = new Node(); 
        List<Integer> a = new ArrayList<>();
        // 插入数据
        node.nums(a);
          
        for (int c: a)
            node.add(c);    
        // 二叉树排序性能
        node.values();
          
        // 冒泡排序性能
        node.mpNums(a);
          
        // 选择排序性能
        node.xzNums(a);
    }
}
package JiHe;

import java.util.ArrayList;
import java.util.List;

public class Node3 {
    //左子节点
    public Node3 leftNode;
    //右子节点
    public Node3 rightNode;

    //值
    public Object value;

    //插入数据
    public void add(Object v) {
        //如果当前节点没有值,就把数据放在当前节点上
        if (null == value)
            value = v;

            //如果当前节点有值,就进行判断,新增的值与当前值的大小关系
        else {
            //新增的值,比当前的值小或者相同
            if ((Integer) v - ((Integer) value) <= 0) {
                if (null == leftNode) {
                    leftNode = new Node3();
                    leftNode.add(v);//左小右大
                }
            }
            //新增的值,比当前值大
            else {
                if (null == rightNode)
                    rightNode = new Node3();
                rightNode.add(v);
            }
        }
    }

    //中序遍历所有的节点
    public List<Object> values(){
        List<Object> values=new ArrayList<>();

        //左节点的遍历结果
        if (null!=leftNode)
            values.addAll(leftNode.values());

        //当前节点
        values.add(value);

        //右节点的遍历
        if(null!=rightNode)
        {values.addAll(rightNode.values());}

        return values;


    }

    public void nums(List<Integer> a) {
        // 随机生成4万个数
        for (int i = 0; i < 40000; i++) {
            int num = (int) (Math.random() * (999 + 1));
            a.add(num);
        }
    }

    //冒泡排序
    public void mpNums(List<Integer> a){
        long start = System.currentTimeMillis();
        for(int n=0;n<a.size();n++)
            for(int m=0;m<a.size()-n-1;m++){
                if (a.get(m) > a.get(m+1)){
                    Integer t = a.get(m);
                    a.set(m, a.get(m+1));
                    a.set(m + 1, t);
                }
            }
        long end=System.currentTimeMillis();
        System.out.println("冒泡排序耗费时间:"+(end-start));
    }

    // 选择排序
    public void xzNums(List<Integer> a) {
        long start = System.currentTimeMillis();
        for (int k = 0;k < a.size(); k++)
            for(int l = k + 1; l < a.size(); l++)
                if (a.get(k) > a.get(l)){
                    Integer t = a.get(k);
                    a.set(k, a.get(l));
                    a.set(l, t);
                }
        long end = System.currentTimeMillis();
        System.out.println("选择排序耗费时间:"+(end-start));
    }

    public static void main(String[] args) {
        Node3 node3=new Node3();
        List<Integer> a=new ArrayList<>();

        long start=System.currentTimeMillis();
        //插入数据
        node3.nums(a);
        for (int c: a)
            node3.add(c);

        // 二叉树排序性能
        node3.values();
        long end=System.currentTimeMillis();
        System.out.println("二叉树耗费时间:"+(end-start));
        // 冒泡排序性能
        node3.mpNums(a);

        // 选择排序性能
        node3.xzNums(a);

    }

    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值