일반적으로 사용되는 알고리즘 빠른 정렬 버킷 정렬 ...

빠른 정렬
아이디어 :
기본적으로 가장 왼쪽 값이 기준입니다.
오른쪽에서 기준 값보다 작은 값을 찾습니다
. 왼쪽에서 기준 값보다 큰 값을 찾습니다 .
위치 교환 (왼쪽이 크지 않은 경우 참조와 직접 위치). 다음과 같이
반복 ...


    /**
     * 快速排序
     * @param a 排序数组
     * @param left 左下标
     * @param right 右下标
     */
    public void quickSort(int []a, int left, int right) {
        //右边游标小于等于左边游标排序结束
        if (right <= left) {
            return;
        }
        int tmp = a[left], 
            min = left, 
            max = right, 
            time;
        while (min < max) {
            //找到右边比左边小
            while (min < max && a[max] >= tmp) {
                max--;
            }
            //找到右边比左边大
            while (min < max && a[min] <= tmp) {
                min++;
            }
            //交换
            time = a[max];
            a[max] = a[min];
            a[min] = time;
        }
        //交换基准
        a[left] = a[min];
        a[min] = tmp;
        //对左边快排
        quickSort(a, left, max - 1);
        //对右边快排
        quickSort(a, max + 1, right);
    }

버킷 정렬
요점 :
데이터 값을 배열 인덱스로 사용하고
배열 요소는 데이터 발생 횟수를 기록합니다.


```java
/**
     * 桶排序
     * @param a 排序数组
     */
    //桶排序
    public void buckSort(int a[]){
        //获取最大值
        OptionalInt max = Arrays.stream(a).max();
        //生成max+1个桶
        int[] bucks = new int[max.getAsInt() + 1];
        //记录每个数字的出现次数
        //索引为元素值,元素为值出现次数
        for (int i : a) {bucks[i]++;}
        //排序数组a的索引
        int index=0;
        //遍历桶,排序数组a重排序
        for (int i = 0; i < bucks.length; i++) {
            //根据数字出现次数(元素值),给排序数组赋值
            for (int j = 0; j < bucks[i]; j++) {
                a[index++]=i;
            }
        }
    }

더 추가 ...

추천

출처blog.csdn.net/weixin_43158695/article/details/113611230