快速排序

来源:互联网 发布:潮汕话学习软件 编辑:程序博客网 时间:2024/05/16 10:59
package per.array.quicksort;/* * 算法:快速排序 * 原理:选择轴心值(中间值),按数组从左到右和从右到左的顺序依次遍历,规则为小放左 * 思想:分治递归 * */public class QuickSort {    //step1-method1:将数组数据分为两部分(partition),左边数据集合<轴心值(一般为arr[0])<右边数据集合    public static int partition(int[] arr, int left, int right) {        int pivotValue = arr[left];        int pivotPointer = left;        while(left < right) {            while(left < right && arr[right] >= pivotValue)                right--;            while(left < right && arr[left] <= pivotValue)                left++;            swap(arr, left, right); //把大的交换到右边,把小的交换到左边。        }        swap(arr, pivotPointer, left); //最后把pivot交换到中间               return left;    }        //step2:分治递归 partition(0,pivotPointer-1)和partition(pivotPointer+1,maxindex)    public static void quickSort(int[] arr, int left, int right) {        if(left >= right)            return ;        //得到轴心位置下标        int pivotPoint = partition(arr, left, right);        //轴心左侧partition        quickSort(arr, left, pivotPoint-1);        //轴心右侧partition        quickSort(arr, pivotPoint+1, right);    }        //step3:实现快速排序    public static void sort(int[] arr) {        if(arr == null || arr.length == 0)            return ;        quickSort(arr, 0, arr.length-1);    }    //preparation:交换数组元素值    public static void swap(int[] arr, int left, int right) {        int temp = arr[left];        arr[left] = arr[right];        arr[right] = temp;    }}
复习算法,已忘记出处--谢谢作者

0 0
原创粉丝点击