冒泡+选择排序

冒泡排序老算法了,这次系统学习排序算法重温一遍,再加上flag优化一下。时间复杂度O(n2)

void bubbleSort(int[] nums) {
        for (int i = 0; i < nums.length - 1; i++) {
            boolean flag = false;
            for (int j = nums.length - 1; j > i; j--)
                if (nums[j] < nums[j - 1]) {
                    nums[j] ^= nums[j - 1];
                    nums[j - 1] ^= nums[j];
                    nums[j] ^= nums[j - 1];
                    flag = true;
                }
            if (flag == false)
                break;
        }
    }

选择排序感觉与冒泡类似,时间复杂度同为O(n2)

void selectSort(int[] nums){
        for (int i = 0; i < nums.length - 1; i++) {
            int index = i;
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[j] < nums[index]) {
                    index = j;
                }
            }
            if (index != i) {
                int tmp = nums[i];
                nums[i] = nums[index];
                nums[index] = tmp;
            }
        }
    }

冒泡排序一般是稳定的,相邻的等值元素(包括经过一系列交换后相邻)不会颠倒顺序。

选择排序不稳定,当局部数组首元素与最小值交换时,首元素与数组中等值元素的先后顺序可能颠倒。

 参考原文

原文地址:https://www.cnblogs.com/faded828x/p/13205668.html