快速排序

1.原理

快速排序就是将每一轮的基准数归位,每次选取数组中的第一位元素作为基准数,有两个变量ij,分别指向队列的最左边和最右边
使用j从右向左遍历,直到找到一个小于基准数的数,使用i从左向右遍历,直到找到一个大于基准数的数,此时将两数进行交换,重复此步骤直至i与j重合
重合时,两个变量重合位置的值必然小于或等于基准数(如果是j从右向左遍历致使二者重合,则重合处数值为上一次交换的小于基准值的值。如果是i从左向右遍历致使二者重合,则重合处数值为本次j所确定的小于基准值的数值)
本次排序完成后,以基准值最新所在位置为中点进行分割,分割为两个数组再次重复上述操作,直到将每次拆分的数组划分为最小

2.代码实现

package com.example.com.controller;

import java.util.Arrays;

public class SortTest {
    public static void main(String[] args) {
        int[] arr = new int[]{4, 3, 1, 2, 45, 6, 8, 9, 10};
        Sort.sort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));
    }
}

class Sort {
    static void sort(int[] a, int begin, int end) {
        if (begin > end) {
            return;
        }
        int base = a[begin];
        int i = begin;
        int j = end;
        while (i != j) {
            while (i < j && a[j] >= base) {
                j--;
            }
            while (i < j && a[i] <= base) {
                i++;
            }
            if (i < j) {//交换
                int swap = a[i];
                a[i] = a[j];
                a[j] = swap;
            }
        }
        a[begin] = a[i];
        a[i] = base;
        sort(a, begin, i - 1);
        sort(a, i + 1, end);
    }
}

posted @ 2021-08-16 10:49  kanaliya  阅读(58)  评论(0)    收藏  举报