Java实现排序算法之快速排序

一、综述

       快速排序是交换排序中的一种,平均算法复杂度是O(nlogn),最坏O(n*n)。下面用Java实现一个快速排序,并用注释的方式解释了思想和原理。


二、Java实现堆排序

package com;

/**
 * @author 王勤为
 * 
 *         这个是实现快速排序的类
 * 
 *         快速排序的基本思想是分治法:
 * 
 *         1.先从数列中取出一个数作为基准数。
 * 
 *         2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
 * 
 *         3.再对左右区间重复第二步,直到各区间只有一个数。
 * 
 *
 */
public class AQuickSort {

	public static void quickSort(int[] a, int left, int right) {

		if (left == right | left > right) { // 终止条件
			return;
		}
		int i = left, j = right; // 定义两个指针,一个从左往右遍历,一个从右往左遍历
		int x = a[left]; // 定义基准数,默认 是数组第一个

		while (i < j) {

			while (a[j] >= x & i < j) { // 如果j指向的数比基数大,继续往左移动指针
				j--;
			}
			while (a[i] <= x & i < j) { // 如果i指向的数比基数小,继续往右移动指针
				i++;
			}
			swap(a, i, j);
		}
		// 以上代码过后 i==j 此时,把基数和i指向的数交换位置
		swap(a, left, i);

		// 递归处理基数左边的数列和右边的数列
		quickSort(a, left, i - 1);
		quickSort(a, i + 1, right);

	}

	// 交换元素的方法
	public static void swap(int[] a, int left, int right) {
		if (a == null | left == right | a.length < 2)
			return;
		int temp = a[left];
		a[left] = a[right];
		a[right] = temp;
	}

}

三、结果检验

public class maintest {
	public static void main(String[] args) {

		int[] a = { 45, 6, 43, 78, 12, 90, 23, 21, 41, 64, 31, 91, 81, 6,45,89,43,12,13,33,99,456,789 };

		AQuickSort.quickSort(a, 0, a.length-1);

		for (int e : a) {
			System.out.print(e + "  ");

		}

	}
}

//调用输出结果为:6  6  12  12  13  21  23  31  33  41  43  43  45  45  64  78  81  89  90  91  99  456  789

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值