排序-4-快速

来源:互联网 发布:算法导论第四版pdf 编辑:程序博客网 时间:2024/05/28 11:51

工具方法类:

package myDataStructrueADNDalgorith.three.arrSort;/** * 数组为模板排序算法中的一些公用的模板方法 * 创建人:曹雪坤 * 时间:2017年3月12日-上午10:15:02  * @version 1.0.0 * */public class Example {    /*     * 交换数组中的两个数据     */    public static void exch(int [] arr,int i,int index){        int change = arr[i];        arr[i] = arr[index];        arr[index] = change;    }    /*     * 遍历数组     */    public static void show(int[] arr){        System.out.println("遍历数组");        for(int i:arr){            System.out.print("  "+i+"  ");        }        System.out.println();    }}

快速排序:

package myDataStructrueADNDalgorith.three.arrSort;/** * 基准值:一般选择序列的第一个元素 * 一次循环: *      从前往后找,找到一个比基准值小的数下标为a, *      在从后往前找,找到一个比基准值大的数下标为b *      如果a<b交换a,b对应的数据,否则退出此次循环 *      交换基准值和b对应的数据,此时所有下标比b小对应的数都比b对应的小,所有下标比b大的都比b对应的数大 *  * 故b将数组划分了两段,这两段同理像这样递归下去,直到传入数组的坐下标大于等于右下标 */public class QuickSort {    public static void main(String[] args) {        int arr[] ={7,5,2,1,3,1,4,6,9,8,10,12,13,1,5,19,11,14,16,20,11,90};        QuickSort.sort(arr, 0, arr.length-1);        Example.show(arr);    }    public static void sort(int[]arr,int L,int R){        if(L>=R)return;        int index = Partion(arr,L,R);        sort(arr, L, index-1);        sort(arr,index+1,R);    }     public static int Partion(int[]arr,int L,int R){        int i = L;        int j = R+1;        int num = arr[L];        //从左往右找,找到第一个大于或等于arr[L]的数的下标i,和从右往左找找到第一个小于或等于arr[L]的下标j        while(true){            while(arr[++i]<num)if(i==R)break;//从左往右找,找到第一个大于或等于arr[L]的数的下标i            while(arr[--j]>num)if(j==L)break;//从右往左找找到第一个小于或等于arr[L]的下标j            /*             * 最极端情况就是所有的数都大于arr[L],和所有的数都小于arr[L]             * 所有的数都大于arr[L],i == L+1,j=R             * 所有的数都小于arr[L],i=R,j=R             * 有小于或等于arr[L]和大于或等于arr[L],就属于正常情况.             */            if(i>=j)break;            Example.exch(arr, i, j);        }//end of while(true)        Example.show(arr);        System.out.println("---"+j+"-"+arr[j]+"=="+L+"=="+arr[L]);        Example.exch(arr, L, j);        return j;    }}
原创粉丝点击