快速排序

package com.dai.sort;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class QuickSort {

    public static void main(String[] args) {
        /*int[] arr = {-9, 78, 0, 23, -567, 70};
        quickSort(arr, 0, arr.length-1);
        System.out.println(Arrays.toString(arr));
*/
        int[] arr = new int[800000]; 
        for(int i=0; i<800000; i++) {
            arr[i] = (int)(Math.random()*8000000);
        }
        Date date1 = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date1String = simpleDateFormat.format(date1);
        System.out.println("排序前的时间为:" + date1String);
        quickSort(arr,0,arr.length-1);
        Date date2 = new Date();
        String date2String = simpleDateFormat.format(date2);
        System.out.println("排序后的时间为:" + date2String);        
    }
    public static void quickSort(int[] arr, int left, int right) {
        int l = left; //左索引
        int r = right;//右索引
        //pivot 中轴
        int pivot = arr[(left+right)/2];
        //比pivot小的放左边,大的放右边
        int temp = 0;
        while(l<r) {
            while(arr[l] < pivot) {
                l +=1;
            }
            while(arr[r]>pivot) {
                r -= 1;
            }
            //如果l >= r,说明Pivot左边全小于=pivot, 右大于=pivot
            if (l>=r) {
                break;
            }
            //交换
            temp = arr[l];
            arr[l] = arr[r];
            arr[r] = temp;
            
            //如果交换玩后,发现arr[l] = pivot,前移
            if(arr[l] == pivot) {
                r -= 1;
            }
            //如果交换完后,arr[r]=pivot,则后移
            if(arr[r] == pivot) {
                l += 1;
            }
        }
        //如果l==r,必须l++ r--, 否则出现栈溢出
        if(l == r) {
            l += 1;
            r -= 1;
        }
        //向左递归
        if(left<r) {
            quickSort(arr, left, r);
        }
        //向右递归
        if(right>l){
            quickSort(arr, l, right);
        }
    }

}
原文地址:https://www.cnblogs.com/shengtudai/p/14396776.html