什么是快速排序?

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

public class QuickSortWithStack {
    public static void quickSort(int[] arr,int startIndex,int endIndex) {
        //递归的退出条件:递归最后一层左边的元素小于或等于右边元素的位置
        if(startIndex >= endIndex) {
            return;
        }
        //得到基准元素的位置

        //取第一个位置的元素作为基准元素
        int pivot = arr[startIndex];
        int left = startIndex;
        int right = endIndex;

        /*
         * 第一步:选定基准元素pivot,设置左指针left和右指针right
         * 第二步:第1次循环,从right指针开始,让指针指向的元素与基准元素作比较。
         * 第三步:如果大于或等于pivot则指针左移,否则停止移动转到left指针
         * 第四步:如果left指针指向的元素小于或等于pivot,则指针向左移动
         * 第五步:如果大于,则转到right指针
         * 第六步:直到left指针和right指针相遇
         */
        while(left != right) {
            while(left<right && arr[right] > pivot) {
                right--;
            }
            while(left<right && arr[left] <= pivot ) {
                left++;
            }
            if(left<right) {
                int p = arr[left];
                arr[left] = arr[right];
                arr[right] = p;
            }
        }
        //pivot和指针重合点交换
        arr[startIndex] = arr[left];
        arr[left] = pivot;

        int pivotIndex =  left;
        //根据基准元素,递归调用
        quickSort(arr,startIndex,pivotIndex-1);
        quickSort(arr,pivotIndex+1,endIndex);
    }

    public static void main(String[] args) {

        int[] arr= {4,5,788,4,32,6,8,99,1,0};

        quickSort(arr, 0, arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
}

注意:

1,right 要先跟 pivot 比较

2,下次递归的边界值为 pivot - 1, pivot + 1

posted @ 2018-12-09 19:53  冬马党  阅读(264)  评论(0编辑  收藏  举报