算法之7-快速排序

本文是快速排序的java实现

package com.demo.sort;

/**
 * Created by Zhang chunrong on 2016/10/3.
 */
public class QuickSort {
    public static void main(String args[]) {
        int arr[] = new int[]{50, 1, 23, 32, 32, 322, 2, 89, 99, 67, 56};
        int arrLen = arr.length;
        quickSort(arr, 0, arrLen - 1);
        for (int i = 0; i < arrLen; i++) {
            System.out.print(arr[i] + " ");
        }
    }
    //快速排序
    private static void quickSort(int[] arr, int i, int idx) {
        /*
        * 1.先从数列中选择一个数作为基准数(pivot)
        * 2.把数列中大于基准数的放在右边,把数列中小于基准数的放在左边
        * 3.再对左右区间进行1,2步,直到各区间只有一个数
        */
        //边界条件
        if (i >= idx) {
            return;
        }
        int pivot = arr[i];
        int start = i;
        int end = idx;
        while (i < idx) {
            //先从右向左查找
            while (i < idx && arr[idx] >= pivot) {
                idx--;
            }
            //开始挖坑
            arr[i] = arr[idx];
            i++;
            while (i < idx && arr[i] < pivot) {
                i++;
            }
            arr[idx] = arr[i];
            idx--;
        }
        //填上最后一个坑
        arr[i] = pivot;
        //对分区内容进行递归调用
        quickSort(arr, start, i - 1);
        quickSort(arr, i + 1, end);
    }
}


输出:


1 2 32 23 32 50 89 56 67 99 322 

猜你喜欢

转载自blog.csdn.net/zhangchun888/article/details/52734826