快速排序

快速排序

快速排序的思路:

1. 找到基准数据(一般找数组的第一个位置)

2. 对这个数组进行分析,将比基准数据小的放到左侧,比基准数据大的放到右侧

3. 找到基准数据所在的坑,然后分析基准数据两侧的数组,重复上面的步骤

对于一个数组{21,32,43,97,21,5,66}

选择21为基础值,比较21与最右侧的值的大小,一步一步移动high游标

到达右侧第二个位置,可以看出5比21小,小的都要移动到左侧

从左往右比较,开始移动左侧的low游标,比较与base,如果大于base交换

开始移动high游标,找比base值小的

 

这样一次位置就找好了,21左侧都是比他小的,右侧都是比他大的,分别对左右两侧进行相似的过程

程序实例如下:

public class QuickSort{
    public static void main(String[] args){
        int[] arr =new int[10];
        System.out.print("原数组为:");
        for(int i = 0;i<10;i++){
            double temp = 100*Math.random();
            arr[i] =(int)temp;
            System.out.print(arr[i] + " ");
        }
        System.out.println();
        System.out.print("排序后的数组为:");

        quickSort(arr,0, arr.length - 1);
        for(int i =0 ;i<= arr.length - 1;i++){
            System.out.print(arr[i]+ " ");
        }
    }

    public static void quickSort(int[] arr, int low, int high){
        if(low >= high) {
            return;
        }
        int division = quick(arr, low, high);
        quickSort(arr, low, division - 1);
        quickSort(arr, division + 1, high);
    }

    public static int quick(int[] arr, int low , int high){
        while(low < high){
            while(low < high && arr[low] < arr[high]){
                high--;
            }
            swap(arr, low, high);
            while(low < high && arr[low] < arr[high]){
                low++;
            }
            swap(arr, low, high);
        }
        return low;
    }

    public static void swap(int[] arr, int low, int high){
        int temp = arr[low];
        arr[low] = arr[high];
        arr[high] = temp;
    }
}

  

原文地址:https://www.cnblogs.com/zhangchiblog/p/8660087.html