快速排序法

来源:互联网 发布:青山水利软件价格 编辑:程序博客网 时间:2024/06/11 10:28
/** * 快速排序法 * 其时间复杂度为O(NlogN) * @author Sailing * */public class QuickSort {static int [] intArray = {9,4,3,7,2,9,1,3,8,5};public static void quicksort(int left,int right){//设置递归出口if(left>right){return;}//假设这个序列 最左端的数为基准数int temp = intArray[left];//假想两个'检测者',前面的检测者用于检测不小于基准数数字,如果不满足就一直往后检测,直到满足条件,暂停检测;//后面的检测者用于检测不大于基准数的数字,如果不满足就一直向前检测,直到满足条件,暂停检测int i = left;int j = right;//只要前后两个移动的 '检测者' 没有相遇,就不会和基准数交换位置while(i!=j){while(intArray[j]>=temp&&i<j){j--;}while(intArray[i]<=temp&&i<j){i++;}//只要前后两个移动的 '检测者' 没有相遇,交换此时它们所在的位置的数字if(i<j){int t = intArray[i];intArray[i] = intArray[j];intArray[j] = t;}}//如果前后两个移动的 '检测者'相遇,此时和基准数交换位置intArray[left] = intArray[i];intArray[i] = temp;//递归接着排序前半部分和后半部分quicksort(left,i-1);quicksort(i+1, right);}public static void main(String[] args) {int length = intArray.length;for(int k=0;k<length;k++){System.out.print(intArray[k]+" ");}System.out.println();quicksort(0, length-1);for(int k=0;k<length;k++){System.out.print(intArray[k]+" ");}}}