java快速排序笔记


快速排序是由東尼·霍爾所發展的一種排序算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 演算法更快,因為它的內部循环(inner loop)可以在大部分的架構上很有效率地被實作出來。


在java的JDK中,就有快速排序了:

Arrays.sort(int[]),采用了一种经 过调优的快速排序:
会根据数组的规模选择直接排序
精心选择枢轴
每一次枢轴v的划分,都会形成一个形如  (<v)* v* (>v)*

具体的优化,看另一个博客:

http://forrest420.iteye.com/blog/1152318

其实研究多了蛋疼,在工作中,使用的最多无非下面两种对对象的数组或list进行排序:

a.将对象的l数组进行排序使用Arrays.sort(Object[] array)对对象数组进行排序,但对象本身要继承Comparable接口,或使用Arrays.sort(Object[] array,实现Comparator接口的类)

b.如果是将对象的List进行排序,就使用Collections.sort(list<Object>),Object实现Comparable接口。

或使用Collections.sort(list<Object>,实现Comparator接口的类)

要是以后问会不会写一个简单的快速排序,说不会,还太寒碜,面试什么的可能还用的着,省的再找

package com.inspiration.arithmetic.sort;


public class QucikSortInt {
	/**
	 * 交换指定数组a的两个变量的值
	 * @param a
	 *            数组应用
	 * @param i
	 *            数组下标
	 * @param j
	 *            数组下标
	 */
	public static void swap(int a[], int i, int j) {
		System.out.println("the change element's index is :"+i+" "+j);
		if (i == j)
			return;
		int tmp = a[i];
		a[i] = a[j];
		a[j] = tmp;
		System.out.println("after swap:");
		output(a);
	}

	/**
	 * 
	 * @param array
	 *            待排序数组
	 * @param low
	 *            数组下标下界
	 * @param high
	 *            数组下标上界
	 * @return pivot 枢轴
	 */
	public static int partition(int array[], int low, int high) {
		// 当前位置为第一个元素所在位置
		int p_pos = low;
		System.out.println("pivot 's index is "+p_pos);
		// 采用第一个元素为轴
		int pivot = array[p_pos];
		for (int i = low + 1; i <= high; i++) {
			if (array[i] < pivot) {
				p_pos++;
				swap(array, p_pos, i);
			}
		}
		swap(array, low, p_pos);
		System.out.println("partition ok,return pivot is: "+p_pos);
		System.out.println("partition ok,the array status is ");
		output(array);
		return p_pos;
	}

	/**
	 * 快速排序实现
	 * 
	 * @param array
	 * @param low
	 * @param high
	 */
	public static void quickSort(int array[], int low, int high) {
		if (low < high) {
			int pivot = partition(array, low, high);
			quickSort(array, low, pivot - 1);
			quickSort(array, pivot + 1, high);
		}
	}

	public static void main(String[] args) {
		int[] array = new int[] { 3, 4, 1, 6, 2 };
		System.out.println("the orignal array is:");
		output(array);
		quickSort(array, 0, array.length - 1);
	}
	public static void output(int[] array){
		for(int i:array){
			System.out.print(i+" ");
		}
		System.out.println();
	}

}
编程是一种艺术的创造,静下心来,才能感觉程序之美。
生活作息有规律,白天工作高效率才能产能平衡,有钱赚,有命花。

你可能感兴趣的:(快速排序,comparator)