您的位置:首页 > 编程语言 > Java开发

java快速排序笔记

2013-01-15 00:00 141 查看
快速排序是由東尼·霍爾所發展的一種排序算法。在平均狀況下,排序 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