java实现快速排序

426 阅读1分钟

序言

最近没什么事,准备把简单的排序都过一遍,记录下来怕以后忘了记不住。

快排原理

1.选择一个基准值(一般都选择第一个)

2.设定起始点(start)和结束点(end),从数组两端分别扫描数组,先从结束点开始扫描,如果值比基准值小,交换起始点的值和结束点的值,然后从起始点开始扫描,如果值比基准值大,交换起始点的值和结束点的值,如此循环之后,数组左边就是小于基准值的,右边就是比基准值大的。

3.采用递归对基准值左右两边数据进行排序。

代码实现

import java.util.Arrays;

public class FastSort {

    public static void main(String[] args) {
        int[] array = {3,23,33,4,23,43242,123,2313,23};
        FastSort(array,0,array.length-1);
        System.out.println(Arrays.toString(array));
    }

    public static void FastSort(int[] array,int start,int end){
        if(start<end){
            int index = OneFastSort(array, start, end);
            FastSort(array,start,index-1);
            FastSort(array,index+1,end);
        }
    }

    public static int OneFastSort(int[] array,int start,int end){
        //设置标识 从结束点向前比较为0 ,反之为1
        int flag = 0;
        int key = array[start];
        while (start!=end){
            if(flag==0){
                if(key>array[end]){
                    array[start] = array[end];
                    flag = 1;
                    start++;
                }else{
                    end--;
                }
            }else{
                if(key<array[start]){
                    array[end] = array[start];
                    flag = 0;
                    end--;
                }else{
                    start++;
                }
            }
        }
        array[start] = key;
        return start;
    }
}