| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 526 人关注过本帖
标题:无聊 做个测试给大家分享下 (冒泡排序和选择排序)
只看楼主 加入收藏
JeffLi
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:116
注 册:2011-11-18
结帖率:0
收藏
 问题点数:0 回复次数:1 
无聊 做个测试给大家分享下 (冒泡排序和选择排序)
package com.jeff.util;

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

public class SortTest {
    // 测试数据大小
    private int sumint;
    private int[] arr;
    private List<Integer> list;

    /**
     * 使用构造函数初始化测试数据分别以指定数据大小生成Array和List
     */
    public SortTest() {
        this.sumint = 1000;// 默认为一千
        this.arr = new int[sumint];
        this.list = new ArrayList<Integer>();
        for (int i = 0; i < 1000; i++) {
            int flag = (int) (Math.random() * 1000);
            this.arr[i] = flag;
            this.list.add(flag);
        }
    }

    public SortTest(int sum) {
        if (sum < 0)
            sum = 1000;// 不合法数据归于默认值
        this.sumint = sum;
        this.arr = new int[sumint];
        this.list = new ArrayList<Integer>();
        for (int i = 0; i < sum; i++) {
            int flag = (int) (Math.random() * sum);
            this.arr[i] = (int) flag;
            this.list.add(flag);
        }
    }

    public void maopao() {
        long start = System.currentTimeMillis();
        System.out.println("冒泡法排序开始:" + start);
        for (int i = 0; i < this.arr.length - 1; i++) {
            for (int j = 0; j < this.arr.length - i - 1; j++) {
                if (this.arr[j] > this.arr[j + 1]) {
                    int temp = this.arr[j];
                    this.arr[j] = this.arr[j + 1];
                    this.arr[j + 1] = temp;
                }
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("冒泡排序结束:" + end);
        System.out.println("冒泡用时:" + (end - start) + "毫秒");
        // for (int i = 0; i < this.arr.length; i++) {
        // System.out.print(this.arr[i] + ", ");
        //
        // }
        System.out.println("===========List start=============");
        start = System.currentTimeMillis();
        System.out.println("冒泡法排序list开始:" + start);
        for (int i = 0; i < this.list.size() - 1; i++) {
            for (int j = 0; j < this.list.size() - i - 1; j++) {
                if (this.list.get(j) > this.list.get(j + 1)) {
                    int temp = this.list.get(j);
                    this.list.set(j, this.list.get(j + 1));
                    this.list.set(j + 1, temp);
                }
            }
        }
        end = System.currentTimeMillis();
        System.out.println("冒泡排序list结束:" + end);
        System.out.println("list冒泡用时:" + (end - start) + "毫秒");

    }

    public void selectSort() {
        System.out.println("+++++++++++++++++++++++++++++++++++");
        long start = System.currentTimeMillis();
        System.out.println("数组选择排序开始:" + start);
        int minnum;// 记录最小数据
        int minindex;// 记录最小数据索引
        for (int i = 0; i < this.arr.length; i++) {
            minnum = this.arr[i];// 取当前第一个数为参考
            minindex = i;
            for (int j = i; j < this.arr.length; j++) {
                if (minnum > this.arr[j]) {
                    minnum = this.arr[j];
                    minindex=j;
                }
            }// 结束内for找到最小数
            if (minindex != i) {
                int temp = this.arr[i];
                this.arr[i]=this.arr[minindex];
                this.arr[minindex] = temp;
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("数组选择排序结束:" + end);
        System.out.println("数组选择用时:" + (end - start) + "毫秒");
        System.out.println("============List选择排序开始=========");
        start = System.currentTimeMillis();
        System.out.println("数组选择排序开始:" + start);
        for (int i = 0; i < this.list.size(); i++) {
            minnum = this.list.get(i);// 取当前第一个数为参考
            minindex = i;
            for (int j = i; j < this.list.size(); j++) {
                if (minnum > this.list.get(j)) {
                    minnum = this.list.get(j);
                    minindex=j;
                }
            }// 结束内for找到最小数
            if (minindex != i) {
                int temp = this.list.get(i);
                this.list.set(i, this.list.get(minindex));
                this.list.set(minindex, temp);
            }
        }
        end = System.currentTimeMillis();
        System.out.println("List选择排序结束:" + end);
        System.out.println("List选择排序用时:" + (end - start) + "毫秒");
//        System.out.println(this.list.toString());
    }

    public static void main(String[] args) {
        SortTest st = new SortTest(1000);
        st.maopao();
        SortTest st1 = new SortTest(1000);
        st1.selectSort();
    }
}
搜索更多相关主题的帖子: 测试 package public private 分享 
2013-01-16 16:53
JeffLi
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:116
注 册:2011-11-18
收藏
得分:0 
这是结果:
测试结果:
1千数据
冒泡法排序开始:1357789380109
冒泡排序结束:1357789380125
冒泡用时:16毫秒
------------------List start-----------------
冒泡法排序list开始:1357789380125
冒泡排序list结束:1357789380156
list冒泡用时:31毫秒
 
1万数据
冒泡法排序开始:1357789284640
冒泡排序结束:1357789284984
冒泡用时:344毫秒
------------------List start-----------------
冒泡法排序list开始:1357789284984
冒泡排序list结束:1357789288109
list冒泡用时:3125毫秒
10万数据
冒泡法排序开始:1357788399125
冒泡排序结束:1357788432484
冒泡用时:33359毫秒
-------------------List start----------------
冒泡法排序list开始:1357788432484
冒泡排序list结束:1357788846312
list冒泡用时:413828毫秒
================================================================
第二组结果(冒泡排序和选择排序进行比较)10万数据
冒泡法排序开始:1357796578421
冒泡排序结束:1357796612656
冒泡用时:34235毫秒
===========List start=============
冒泡法排序list开始:1357796612656
冒泡排序list结束:1357797025906
list冒泡用时:413250毫秒
+++++++++++++++++++++++++++++++++++
数组选择排序开始:1357797025937
数组选择排序结束:1357797042203
数组选择用时:16266毫秒
============List选择排序开始=========
数组选择排序开始:1357797042203
List选择排序结束:1357797159453
List选择排序用时:117250毫秒

总结:
1. 一般情况下数据量很小可以使用冒泡排序,原因在于写法简单,可以随手写出。
2. 选择排序把交换次数降到最低,但比较的次数仍然和冒泡一样。比冒泡优化了交换次数,如果数据比较时更加耗时,选择排序和冒泡排序效率基本一致
3. 插入排序比起冒泡来效率相当高,比选择稍好一点,差距不大,是最好选择,但缺点在于排序数组时,移动比较耗时,
总结:当数据很小时,用冒泡排序;当数据量不算太小是数组情况下,用选择排序;当是对象或是list时,用插入排序

[ 本帖最后由 JeffLi 于 2013-1-16 17:18 编辑 ]

我的企鹅:67567840
2013-01-16 16:56
快速回复:无聊 做个测试给大家分享下 (冒泡排序和选择排序)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017095 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved