java快速排序算法

使用java实现快速排序,并进行效率测试

java快速排序算法_第1张图片

package com.yzy.testsort;

import java.util.Random;

/**
 * @className QuickSort.java
 * @author yangsir
 * @version V1.0
 * @date 2019年7月27日-上午9:29:35
 * @description 快速排序 会先把数组中的一个数当做基准数,一般会把数组中最左边的数当做基准数。 然后从两边进行检索。先从右边检索比基准数小的。
 *              再从左边检索比基准数 大的。如果检索到了,就停下,然后交换这两个元素。然后再继续检索。
 *
 */
public class QuickSort {

	public static void main(String[] args) {
//		int arr[] = { 2, 3, 23, 41, 4, -7, 26 };
//		quickSort(arr, 0, arr.length - 1);
//		for (int i = 0; i < arr.length; i++) {
//			System.out.print(arr[i] + " ");
//		}
		testQuickSort();
	}

	public static void quickSort(int[] arr, int left, int right) {
		// 进行判断,如果左边下标大于右边下标是不合法的
		if (left > right)
			return;
		// 讲最左边的数的值给基准数
		int base = arr[left];
		// 左边从下标i开始
		int i = left;
		// 右边从下标j开始
		int j = right;
		// 只有当两边的下标不相等时才进行检索
		while (i != j) {
			// j是从右往左找比基准数小的就停下,换句话说,如果找到比基准数大或者的与基准数相等的就继续
			while (arr[j] >= base && i < j) {
				// 没有找到就继续
				j--;
			}

			// i是从左往右找比基准数小的就停下,换句话说,如果找到比基准数大或者的与基准数相等的就继续
			while (arr[i] <= base && i < j) {
				// 没有找到就继续
				i++;
			}
			// 当不满足这两个while条件时就代表j找到了比基准数小的,i找到了比基准数大的,此时可以进行交换
			int temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
		}
		// 因为上面定义了int base = arr[left],所以直接交换即可
		arr[left] = arr[i];
		arr[i] = base;
		// 递归,在数组arr中从下标left~i-1再进行快速排序
		quickSort(arr, left, i - 1);
		// 递归,在数组arr中从下标j+1~right再进行快速排序
		quickSort(arr, j + 1, right);
	}

	// 定义一个测试类,来测试快速排序的效率
	public static void testQuickSort() {
		// 定义一个任意大的数组
		int[] arr = new int[1000000];
		// 生成对应的随机数将其存入数组中
		Random r = new Random();
		for (int i = 0; i < arr.length; i++) {
			arr[i] = r.nextInt();
		}
		// 计算当前系统时间,以毫秒表示
		long start = System.currentTimeMillis();
		quickSort(arr, 0, arr.length - 1);
		// 计算当前排序结束时间
		long end = System.currentTimeMillis();
		// 快速排序所花的时间
		System.out.println(end - start);
	}
}

经测试,在对十万个随机数进行排序的时候快速排序所花的时间为2毫秒左右,在对一百万个随机数进行排序的时候快速排序所花的时间大约为15毫秒左右,而冒泡排序大约需要24秒,在对一千万个数进行排序的时候快速排序所花的时间大约为1.5秒,而冒泡排序没有几个小时很显然是完不成的。由此可见快速排序的效率是很高的。

你可能感兴趣的:(算法)