最后的输出结果为:
冒泡=659
选择=522
快速=14
下边请看代码解释
package cn.beiyun.test;
import java.util.ArrayList;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
// 创建集合添加数
List<Integer> list = new ArrayList<Integer>();
Integer a = 40;
for (int i = 0; i < 10000; i++) {
list.add(a);
a++;
}
// 把集合添加的数据转为数组
Integer[] arr = new Integer[list.size()];
for (int i = 0; i < list.size(); i++) {
arr[i] = list.get(i);
}
// 定义冒泡,选择,快速排序
long m, x, k;
// 冒泡排序调用
long start = System.currentTimeMillis();
Integer[] bubbleList = listAll(arr);
long end = System.currentTimeMillis();
m = end - start;
// 选择排序调用
start = System.currentTimeMillis();
Integer[] listAll = listAll1(arr);
end = System.currentTimeMillis();
x = end - start;
// 快速排序调用
start = System.currentTimeMillis();
Integer[] fastSort = fastSort(arr, 0, arr.length - 1);
end = System.currentTimeMillis();
k = end - start;
System.out.println("冒泡=" + m);
System.out.println("选择=" + x);
System.out.println("快速=" + k);
}
// 冒泡排序
/**
* 冒泡排序
*
* @param arr
* @return
*/
private static Integer[] listAll(Integer[] arr) {
for (Integer i = 0; i < arr.length - 1; i++) {
for (Integer j = 0; j < arr.length - i - 1; j++) {
Integer temp = 0;
// System.out.println(arr[j]+"---"+arr[j+1]);
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
// 选择排序
/**
* 选择排序
*
* @param arr
* @return
*/
private static Integer[] listAll1(Integer[] arr) {
for (Integer i = 0; i < arr.length - 1; i++) {
for (Integer j = i + 1; j < arr.length; j++) {
Integer temp = 0;
// System.out.println(arr[i]+"---"+arr[j]);
if (arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
/**
* 快速排序
*
* @param arr
* @param left
* @param right
*/
public static Integer[] fastSort(Integer[] strDate, int left, int right) {
Integer middle, tempDate;
Integer i, j; // i为起始位置,j为最后位置
i = left;
j = right;
middle = strDate[(i + j) / 2];
do {
while (strDate[i].compareTo(middle) < 0 && i < right) {
i++; // 找出左边中间值大的数
}
while (strDate[j].compareTo(middle) > 0 && j > left) {
j--; // 找出右边中间值小的数
}
if (i <= j) { // 将左边大的数和右边小的数进行替换
tempDate = strDate[i];
strDate[i] = strDate[j];
strDate[j] = tempDate;
i++;
j--;
}
} while (i <= j); // 当两者交错时停止
if (i < right) { // 如果i小于调用时右边的数
fastSort(strDate, i, right);
}
if (j > left) { // 如果j大于调用时左边的数
fastSort(strDate, left, j);
}
return strDate;
}
}