Java实现快速排序

来源:互联网 发布:优化软件点击 编辑:程序博客网 时间:2024/06/13 22:45

Java实现快速排序 引入随机性使得算法对所有的输入都能获得较好的期望性能

package cn.edu.sortalgorithm;import java.util.Random;public class QuickSort {    /************快速排序***************************/    /*partition的作用是获得某一主元素的最终位置,使得该元素左边的数据不大于该元素,右边的数据不小于该元素*/    public static int partition(int array[], int left, int right){        /*快速排序引入随随机性,得到随机化的快排版本,使得算法对所有的输入都能获得较好的期望性能*/        Random random = new Random();        //生成left~right(包含边界)之间的一个随机整数        int randomIndex = random.nextInt(right-left+1) + left;        //元素大小交换,保证随机性        int tmp = array[left];        array[left] = array[randomIndex];        array[randomIndex] = tmp;        //选取主元        int tmpVal = array[left];        while(left < right){//从左右两边交替扫描知道left=right            while(right > left && array[right] >= tmpVal){                right--;            }            array[left] = array[right];            while(left < right && array[left] <= tmpVal){                left++;            }            array[right] = array[left];        }        array[left] = tmpVal;//将主元素放在其最终的位置上        return left;        }        public static void quickSort(int array[], int left, int right){            if(left < right){//待排序的元素至少有两个的情况                int pivot = partition(array, left, right);                System.out.println(pivot);                printArray(array);                quickSort(array, left, pivot-1);                quickSort(array, pivot+1, right);            }        }        /********打印所有数组元素****************************/        public static void printArray(int array[]){            for(int k=0; k<array.length; k++){                System.out.print(array[k] + " ");            }                System.out.println();        }        public static void main(String[] args) {            int inputArray[] = {8000, 49, 38, 65, 97, 76, 13, 27, 49, 49, 55, 04, 49, 1000, -1};            System.out.println("the input array is : ");            printArray(inputArray);            quickSort(inputArray, 0, inputArray.length-1);            System.out.println("the output array is : ");            printArray(inputArray);        }       }
原创粉丝点击