冒泡排序,选择排序,快速排序效率对比

最后的输出结果为:

冒泡=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 list = new ArrayList();
		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;
	}
}

 

你可能感兴趣的:(test)