快速排序

package com.zhao.algorithm.sort;



import java.util.Arrays;

/**
 * 快速排序
 */
public class QuickSort {
    public static void main(String[] args) {
        int []arr={5,8,9,7,4,5,6,45,1,2,8,1,2,7};
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

    /**
     *
     * @param arr 要排序的数组
     * @param start 开始排序的位置
     * @param end  结束排序的位置
     */
    private static void quickSort(int[] arr,int start,int end) {
        if (start < end) {
            //以那个数字开始比较,从数组第一个数字 标准数
            int begin = arr[start];
            //记录需要排序的下标
            int low = start;
            int high = end;
            //循环找比标准数字大的和比标准数字小的
            while (low < high) {
                //如果右边数字比标准数字大
                while (low < high && begin <= arr[high]) {
                    high--;
                }
                //如果右边数字比标准数字小 ,替换右边数字到以low为下标的数字
                arr[low] = arr[high];
                //如果左边数字比标准数字小
                while (low < high && begin >= arr[low]) {
                    low++;
                }
                //如果左边数字比标准数字大 ,替换当前数字到以high为下标的数字
                arr[high] = arr[low];
            }
            //当low 和high重合时 将这个下标的数字设置为标准数
            arr[low] = begin;
            //递归继续分割
            //递归分割右边的
            quickSort(arr, low + 1, end);
            //递归分割左边的
            quickSort(arr, start, low);
        }
    }
}

 

posted @ 2020-02-14 22:11  Angry-rookie  阅读(88)  评论(0)    收藏  举报