一般的に使用されるアルゴリズムクイックソートバケットソート...

クイックソートの
アイデア:
デフォルトでは、左端の値を参照として使用します。
右から参照値よりも小さい値を見つけます。
左から参照値よりも大きい値を見つけます
位置を交換します(上に大きな値がない場合)左、リファレンスと直接位置を交換します)
繰り返し...
次のように


    /**
     * 快速排序
     * @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