排序算法之快速排序

2018-03-20  本文已影响443人  阿狸404
package com.wang.sort;

/**
 * 快速排序
 * 思路:为每一个基数通过分治思想找到合理位置
 * 
 * @author wxe
 * @since 0.0.1
 */
public class QuickSort {
    public static void quickSort(int[] arr, int low, int high) {
        int i, j, temp, t;
        if (low > high) {
            return;
        }
        i = low;
        j = high;
        // temp就是基准位
        temp = arr[low];
        System.out.println("我是基准:"+temp);

        while (i < j) {
            // 先看右边,依次往左递减
            while (temp <= arr[j] && i < j) {
                j--;
            }
            // 再看左边,依次往右递增
            while (temp >= arr[i] && i < j) {
                i++;
            }
            // 如果满足条件则交换
            if (i < j) {
                t = arr[j];
                arr[j] = arr[i];
                arr[i] = t;
            }

        }
        // 最后将基准为与i和j相等位置的数字交换
        arr[low] = arr[i];
        arr[i] = temp;
        
        // 递归调用左半数组
        quickSort(arr, low, j - 1);
        // 递归调用右半数组
        quickSort(arr, j + 1, high);
    }

    public static void main(String[] args) {
        int[] arr = {6,1,2,7,9,3,4,5,10,8};
        System.out.println("开始");
        quickSort(arr, 0, arr.length - 1);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+",");
        }
    }

}


我们来分析一下基本的思路:


基准数为6.png

到此为止,我们把最开始基准数为6左边分类所有的数字的基准数都找到了合适的位置.

上一篇下一篇

猜你喜欢

热点阅读