排序算法

其中的代码如果有问题或者有更好的解法,望各位不吝赐教!

冒泡排序

原理:以一个整数数组为例,排序核心是每次比较相邻两个元素的大小,这样一次循环可以将一个最大或最小的元素放到数组头或数组尾,直到没有元素被移动算法结束

步骤(按从小到大排序):

  1. 遍历数组,比较相邻两个元素,如果prev>next,那么交换两个元素
  2. 遍历完之后判断是否有元素被移动
    1. 被移动-->返回步骤1
    2. 无移动-->步骤3
  3. 退出算法

代码实现:

public class BubbleSort {
    public static void main(String[] args) {
        final long seed = -26443L;
        final int arrLength = 100;
        final int[] unSortArray = new int[arrLength];

        Random random = new Random();
        random.setSeed(seed);

        for (int i = 0; i < ARR_LENGTH; ++i) {
            unSortArray[i] = Math.abs(random.nextInt() % 100);
        }
        
        // [77, 67, 8, 2, 88, 95, 75, 14, 41, 75]
        System.out.println(Arrays.toString(unSortArray));
        bubbleSort(unSortArray);
        // [2, 8, 14, 41, 67, 75, 75, 77, 88, 95]
        System.out.println(Arrays.toString(unSortArray));
    }

    static void bubbleSort(int[] arr) {
        if (arr.length < 2) {
            return;
        }

        // 记录元素移动次数
        int count;
        int loopTimes = arr.length - 1;

        while (true) {
            count = 0;

            for (int i = 0; i < loopTimes; i++) {
                if (arr[i] > arr[i + 1]) {
                    swap(arr, i, i + 1);
                    count++;
                }
            }

            if (count == 0) {
                return;
            }

            loopTimes--;
        }
    }

    static void swap(int[] arr, int idx, int oIdx) {
        int temp = arr[idx];
        arr[idx] = arr[oIdx];
        arr[oIdx] = temp;
    }
}
posted on 2020-11-14 10:07  老鼠不上树  阅读(67)  评论(0)    收藏  举报