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接口的类)
要是以后问会不会写一个简单的快速排序,说不会,还太寒碜,面试什么的可能还用的着,省的再找
编程是一种艺术的创造,静下心来,才能感觉程序之美。
生活作息有规律,白天工作高效率才能产能平衡,有钱赚,有命花。
在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(); } }
编程是一种艺术的创造,静下心来,才能感觉程序之美。
生活作息有规律,白天工作高效率才能产能平衡,有钱赚,有命花。
相关文章推荐
- 算法笔记 - 数组与单链表快速排序(Java)
- 算法(第四版)学习笔记之java实现快速排序
- java基础内容笔记--快速排序
- 算法笔记_015:快速排序(Java)
- Java回调机制(笔记)
- 【我的Java笔记】多线程_使用匿名内部类的方式实现多线程
- Java多线程学习笔记1——线程的实现方式以及定时器的使用
- java听课笔记(六)
- java包(Package)笔记
- 笔记:java开发中一些好用的开源jar包工具(将不定期持续更新)
- 学习笔记5: java中Thread类中的interrupt()(补充)
- grpc学习笔记--Java版
- java学习笔记(一)
- 安卓和 java 学习笔记
- Core Java Volume I - Fundamentals (10th) 1-8章 阅读笔记
- Java学习笔记之接口
- JAVA学习笔记44——其他容器简介2:HashTable+Properties
- java集合笔记
- java学习笔记09--反射机制
- Java学习笔记43:Java泛型