前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >十大排序

十大排序

原创
作者头像
用户9236851
发布2023-03-02 19:16:33
2340
发布2023-03-02 19:16:33
举报
文章被收录于专栏:myTest

冒泡排序

代码语言:javascript
复制
public class BubbleSort {

    public static void main(String[] args) {

        int[] arr = {3, 2, 5, 4, 1, 6, 9, 7, 8, 0};
        BubbleSort.sort(arr);

        for (int i : arr) {
            System.out.print(i + " ");
        }
    }

    public static void sort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            for (int j = 1; j <= arr.length - i; j++) {
                if (arr[j - 1] > arr[j]) {
                    swap(arr, j - 1, j);
                }
            }
        }
    }

    private static void swap(int[] arr, int index1, int index2) {
        int tmp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = tmp;
    }
}

桶排序

代码语言:javascript
复制
import java.util.Arrays;

public class BucketSort {
    public static void main(String[] args) {
        int[] arr = {3, 2, 5, 4, 1, 6, 9, 7, 8, 0};
        BucketSort.sort(arr, 3);

        for (int i : arr) {
            System.out.print(i + "   ");
        }
    }

    public static void sort(int[] arr, int bucketSize) {
        int maxVal = Integer.MIN_VALUE, minVal = Integer.MAX_VALUE;
        for (int item : arr) {
            maxVal = Math.max(maxVal, item);
            minVal = Math.min(minVal, item);
        }

        int[][] buckets = new int[(maxVal - minVal) / bucketSize + 1][0];
        for (int item : arr) {
            int bucketIndex = (item - minVal) / bucketSize;
            int[] newBucket = Arrays.copyOf(buckets[bucketIndex], buckets[bucketIndex].length + 1);
            newBucket[newBucket.length - 1] = item;
            buckets[bucketIndex] = newBucket;
        }

        int index = 0;
        for (int[] bucket : buckets) {
            BubbleSort.sort(bucket);
            for (int item : bucket) {
                arr[index++] = item;
            }
        }
    }
}

计数排序

代码语言:javascript
复制
public class CountSort {
    public static void main(String[] args) {
        int[] arr = {3, 2, 5, 4, 1, 6, 9, 7, 8, 0};
        CountSort.sort(arr);

        for (int i : arr) {
            System.out.print(i + "   ");
        }
    }

    public static void sort(int[] arr) {
        int maxVal = Integer.MIN_VALUE, minVal = Integer.MAX_VALUE;
        for (int item : arr) {
            maxVal = Math.max(maxVal, item);
            minVal = Math.min(minVal, item);
        }

        int[] bucket = new int[maxVal - minVal + 1];

        for (int item : arr) {
            bucket[item]++;
        }

        int index = 0;
        for (int i = 0; i < bucket.length; i++) {
            while (bucket[i]-- > 0) {
                arr[index++] = i;
            }
        }
    }
}

堆排序

代码语言:javascript
复制
public class HeapSort {
    public static void main(String[] args) {
        int[] arr = {3, 2, 5, 4, 1, 6, 9, 7, 8, 0};
        HeapSort.sort(arr);

        for (int i : arr) {
            System.out.print(i + "   ");
        }
    }

    public static void sort(int[] arr) {
        for (int i = arr.length >> 1; i >= 0; i--) {
            heap(arr, i, arr.length);
        }

        for (int i = arr.length - 1; i >= 0; i--) {
            swap(arr, 0, i);
            heap(arr, 0, i);
        }
    }

    private static void heap(int[] arr, int root, int len) {
        int rootIndex = root, leftIndex = rootIndex * 2 + 1, rightIndex = rootIndex * 2 + 2;

        if (leftIndex < len && arr[rootIndex] < arr[leftIndex]) {
            rootIndex = leftIndex;
        }
        if (rightIndex < len && arr[rootIndex] < arr[rightIndex]) {
            rootIndex = rightIndex;
        }

        if (rootIndex != root) {
            swap(arr, root, rootIndex);
            heap(arr, rootIndex, len);
        }
    }

    private static void swap(int[] arr, int index1, int index2) {
        int tmp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = tmp;
    }
}

插入排序

代码语言:javascript
复制
public class InsertSort {
    public static void main(String[] args) {
        int[] arr = {3, 2, 5, 4, 1, 6, 9, 7, 8, 0};
        InsertSort.sort(arr);

        for (int i : arr) {
            System.out.print(i + "   ");
        }
    }

    public static void sort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {

            int tmp = arr[i];
            int index = i - 1;
            while (index >= 0 && arr[index] > tmp) {
                arr[index + 1] = arr[index--];
            }
            arr[index + 1] = tmp;
        }
    }
}

归并排序

代码语言:javascript
复制
import java.util.Arrays;

public class MergeSort {
    public static void main(String[] args) {
        int[] arr = {3, 2, 5, 4, 1, 6, 9, 7, 8, 0};
        MergeSort.sort(arr);

        for (int i : arr) {
            System.out.print(i + "   ");
        }
    }

    public static void sort(int[] arr) {

        if (arr.length < 2) return;

        int mid = arr.length >> 1;
        int[] leftArr = Arrays.copyOfRange(arr, 0, mid);
        int[] rightArr = Arrays.copyOfRange(arr, mid, arr.length);

        sort(leftArr);
        sort(rightArr);

        int index = 0;
        while (leftArr.length > 0 && rightArr.length > 0) {
            if (leftArr[0] <= rightArr[0]) {
                arr[index++] = leftArr[0];
                leftArr = Arrays.copyOfRange(leftArr, 1, leftArr.length);
            } else {
                arr[index++] = rightArr[0];
                rightArr = Arrays.copyOfRange(rightArr, 1, rightArr.length);
            }
        }
        while (leftArr.length > 0) {
            arr[index++] = leftArr[0];
            leftArr = Arrays.copyOfRange(leftArr, 1, leftArr.length);
        }
        while (rightArr.length > 0) {
            arr[index++] = rightArr[0];
            rightArr = Arrays.copyOfRange(rightArr, 1, rightArr.length);
        }
    }

}

快速排序

代码语言:javascript
复制
public class QuickSort {
    public static void main(String[] args) {
        int[] arr = {3, 2, 5, 4, 1, 6, 9, 7, 8, 0};
        QuickSort.sort(arr, 0, arr.length - 1);

        for (int i : arr) {
            System.out.print(i + "   ");
        }
    }

    public static void sort(int[] arr, int left, int right) {
        if (left >= right) return;
        int index = left + 1;
        for (int i = index; i <= right; i++) {
            if (arr[i] < arr[left]) {
                swap(arr, i, index);
                index++;
            }
        }
        swap(arr, left, index - 1);
        sort(arr, left, left - 1);
        sort(arr, left + 1, right);
    }

    private static void swap(int[] arr, int index1, int index2) {
        int tmp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = tmp;
    }
}

基数排序

代码语言:javascript
复制
public class RadioSort {

    public static void main(String[] args) {

        int[] arr = {3, 2, 5, 4, 1, 6, 9, 7, 8, 0};
        RadioSort.sort(arr);

        for (int i : arr) {
            System.out.print(i + "   ");
        }
    }

    public static void sort(int[] arr) {
        int max = Integer.MIN_VALUE;
        for (int item : arr) {
            max = Math.max(max, item);
        }

        // 计算位数
        int point = 1;
        while (max / 10 > 0) {
            max = max / 10;
            point++;
        }

        int[] bucket = new int[arr.length];

        int div = 1;
        for (int i = 1; i <= point; i++, div *= 10) {

            for (int item : arr) {
                bucket[item / div % 10] = item;
            }

            int index = 0;
            for (int item : bucket) {
                arr[index++] = item;
            }
        }
    }
}

选择排序

代码语言:javascript
复制
public class SelectSort {
    public static void main(String[] args) {
        int[] arr = {3, 2, 5, 4, 1, 6, 9, 7, 8, 0};
        SelectSort.sort(arr);

        for (int i : arr) {
            System.out.print(i + "   ");
        }
    }

    public static void sort(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            swap(arr, minIndex, i);
        }
    }

    private static void swap(int[] arr, int index1, int index2) {
        int tmp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = tmp;
    }
}

希尔排序

代码语言:javascript
复制
public class ShellSort {
    public static void main(String[] args) {
        int[] arr = {3, 2, 5, 4, 1, 6, 9, 7, 8, 0};
        ShellSort.sort(arr);

        for (int i : arr) {
            System.out.print(i + "   ");
        }
    }

    public static void sort(int[] arr) {
        for (int i = arr.length >> 1; i > 0; i >>= 1) {

            for (int j = i; j < arr.length; j += i) {
                int tmp = arr[j];
                int index = j - i;
                while (index >= 0 && arr[index] > tmp) {
                    arr[index + i] = arr[index];
                    index -= i;
                }
                arr[index + i] = tmp;
            }
        }
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 冒泡排序
  • 桶排序
  • 计数排序
  • 堆排序
  • 插入排序
  • 归并排序
  • 快速排序
  • 基数排序
  • 选择排序
  • 希尔排序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档