![]() |
#2
JeffLi2013-01-16 16:56
这是结果:
测试结果: 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 编辑 ] |
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();
}
}