快速排序(Java)

一、概念
快速排序(QuickSort)是对起泡排序的一种改进。它的基本思想是,通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
二、图解
《快速排序(Java)》

三、Java代码

package com.hgldp.web;

import java.util.Arrays;

public class TestTwo {

    public static void main(String[] args) {
        int[] arr = {23,8,19,40,12,45,9,1,90,20};//待排序的数组
        quickSort(arr, 0, arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

    public static void quickSort(int[] arr,int low,int high){
        if(low<high){//如果待排序的关键字的个数大于1
            sortMethod(arr, low, high);
        }
    }

    //递归方法
    public static void sortMethod(int[] arr,int low,int high){
        if(low>=high){//如果low的位置大于或等于high的位置,就结束了
            return ;
        }
        int j =high;
        int key = arr[low];//取关键字
        while(low<high){//在一趟内
            while(low<high && arr[high]>key){//high往后移动
                high--;
            }
            arr[low]=arr[high];//j往后移动过程中总会找到一个比key小的
            while(low<high && arr[low]<=key){//low往前移动
                low++;
            }
            arr[high]=arr[low];//极端情况,high=low也没关系,互相赋值,等于没有变化
        }
        arr[low] = key;//循环到最后,arr[low]上面的值一定是无用的值,把key放到这个位置上去
        sortMethod(arr, low+1, j);//低位递归
        sortMethod(arr,0,low-1);//高位递归
    }
}

四、把快速排序的思想掌握,代码就很好写了。如有不足,欢迎指出。

点赞