码迷,mamicode.com
首页 > 编程语言 > 详细

Java快速排序

时间:2016-08-02 20:50:55      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

快速排序只要记住两个步骤:

  1. 找到一个基准点,将大于基准点的数放在基准点右侧,小于基准点的数放在基准点左侧(当然也可以反着放,小于的放右边,大于的放左边)

  2. 将步骤1得到的数组按基准点分为左右两个部分(左侧都是小于基准点的数,右侧都是大于基准点的数),分别对这两部分递归调用步骤1

 

实现代码如下:

import java.io.*;

public class QuickSort {
    
    public static void main(String[] args) {
        int[] arr = {9, 2, 2, 10, 3, 27, 1};//待排序的数组
        quickSort(arr, 0, arr.length - 1);
        for(int i = 0; i < arr.length; i++) {
            System.out.println(arr[i] + "  ");
        }
    }
    
    /*
        arr:   待排序数组
        left:  排序起始位置
        right: 排序终止位置
    */
    private static void quickSort(int[] arr, int left, int right) {
        if(left > right || arr == null || arr.length == 0) {
            return;
        }
        int pivot = arr[left];//以左边界的值为基准
        int i = left;
        int j = right;//使用局部变量接收参数
        
        while(i != j) {//当i = j时表示已经排序好(即基准点左侧都小于基准点,基准点右侧都大于基准点)
            while(arr[j] >= pivot && i < j) {//从右往左找小于基准点的数
                j--;
            }
            while(arr[i] <= pivot && i < j) {//从左往右找大于基准点的数
                i++;
            }
            if(i < j) {//寻找到的大于/小于基准点的下标还没有相遇(相遇了就本轮排序结束跳出循环),此时交换两个的位置
                int tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
        
        //将基准数归位
        arr[left] = arr[i];
        arr[i] = pivot;
        
        quickSort(arr, left, i-1);
        quickSort(arr, i+1, right);
        
    }
}

 

Java快速排序

标签:

原文地址:http://www.cnblogs.com/jimmyoung/p/5730589.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!