冒泡排序和选择排序

    /**
     * 数组中两个位置交换的算法
     * @param array 数组
     * @param i 位置
     * @param j 位置
     */
    static void change(int[] array, int i, int j) {
        if (i == j) return;
        array[i] = array[i] + array[j];
        array[j] = array[i] - array[j];
        array[i] = array[i] - array[j];
    }

冒泡排序
第一步把最大的元素放到末尾
第二步把次大元素放到倒数第二位

/*
 * 冒泡排序
 * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
 * 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
 * 针对所有的元素重复以上的步骤,除了最后一个。
 * 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
 * @param numbers 需要排序的整型数组
 */
  static void bubbleSort(int[] array) {
        int length = array.length;
        // for1记录循环次数
        for (int i=0;iarray[j+1]) {
                    change(array, j, j+1);
                }
            }
        }
    }

选择排序
第一步从未排序的数组中找到最小元素放到index=0的位置
第二步从未排序的数组中找到最小元素放到index=1的位置

    /**
     * 选择排序算法
     * 在未排序序列中找到最小元素,存放到index=0的位置
     * 再从剩余未排序元素中继续寻找最小元素,存放到index=1的位置。
     * 以此类推,直到所有元素均排序完毕。
     */
    static void selectSort(int[] array) {
        int length = array.length;
        // 外层控制循环次数
        for (int i=0;ii;j--) {
                if (array[j]

冒泡排序和选择排序的区别:冒泡排序的思想为:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端。选择排序是每一次排序过程,我们获取当前没有排好序中的最大(小)的元素和数组最右(左)端的元素交换,循环这个过程即可实现对整个数组排序。

你可能感兴趣的:(冒泡排序和选择排序)