排序算法--快速排序

快速排序的基本思想:

快速排序所采用的思想是分治的思想。所谓分治,就是指以一个数为基准,将序列中的其他数往它两边“扔”。比它小的都“扔”到它的左边,比它大的都“扔”到它的右边,然后左右两边再分别重复这个操作,不停地分,直至分到每一个数的左边的数都小于或等于这个数,右边都等于或大于这个数。这时排序也就完成了。

import java.util.Arrays;

public class QuickSort {
    public static void main(String[] args) {
        int[] arr = { 49, 38, 65, 97, 23, 22, 76, 1, 5, 8, 2, 0, -1, 22 };
        arr=quickSort(arr, 0, arr.length - 1);
    }

    private static int[] quickSort(int[] arr, int low, int high) {
    	// 每个区域排序时的最高位和最低位
        int l=low;
        int r=high;
        //这里是栈退出的条件
        if (low < high) {
            // 基准数
            int temp=arr[low];
            while(low < high){
                // 从最右边开始,依次往左,找到比基准数小的数
                while(low < high && arr[high]>=temp){
                    high--;
                }
                // 将找到的大数放在基准数的左边,即当前指针指向的低位的下标
                arr[low]=arr[high];
                // 从最左边开始,依次往右,找到比基准数大的数
                while(low < high && arr[low]<=temp){
                    low++;
                }
                // 将找到的小数放在基准数的右边,即当前指针指向的高位的下标
                arr[high]=arr[low];
            }
            System.out.println(Arrays.toString(arr));
            // 一旦走到这里,说明高位和低位相遇了
            arr[low] = temp;  //可以写成arr[high] = temp
            int index=low;
            // 第一轮排序结束之后,基准数左边的都小于基准数,右边的都大于基准数
            // 然后继续针对基准数左边的重新做排序
            quickSort(arr, l, index - 1);
            // 然后继续针对基准数右边的重新做排序
            quickSort(arr, index + 1, r);
        }
        return arr;
    }
}

排序算法--快速排序_第1张图片

你可能感兴趣的:(数据结构,排序算法,算法,数据结构)