快速排序

思路分析:

快速排序是实现应用中非常常用的一种算法, 时间复杂度为O(nlongn). 快速排序利用分治法, 随机选取一个point值, 然后把小于point的放在左边, 把大于point的放在右边, 经过这样一次操作, 左边都小于point, 右边都大于point. 然后分别对point左边和右边的数据继续进行改操作, 就可以得到一个排序数组.

重点是结束递归的条件, 当元素个数<=1的时候.

 

代码:

public class Quick {

    public void sort(int[] arrays){  
        int[] arr = quickSort(arrays, 0, arrays.length - 1);
        for(int i = 0; i < arr.length; i++){
            System.out.println(arr[i]);
        }
    }

    public int[] quickSort(int[] arr, int left, int right){ 
        if(left < right){
            int index = partition(arr, left, right);  //第一次分边
            quickSort(arr, left, index - 1);  //对左
            quickSort(arr, index + 1, right);  //对右
        }
        return arr;
    }

    public int partition(int[] arr, int left, int right){ //分边并返回界点
        int pivot = left;
        int index = pivot + 1;
        for (int i = index; i <= right; i++){
            if(arr[i] < arr[pivot]){
                swap(arr, i, index);
                index++;
            }
        }
        swap(arr, pivot, index - 1);
        return index - 1;
    }

    public void swap(int[] arr, int i, int j){  //交换
        int temp = 0;
        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void main(String[] args) {
        int[] arr = {6,4,3,7,9,0};
        Quick quick = new Quick();
        quick.sort(arr);
    }
}

 

posted @ 2020-04-18 23:17  Coding-Liu  阅读(89)  评论(0)    收藏  举报