排序算法----冒泡和选择排序

1、冒泡排序

冒泡排序的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。

1.1冒泡排序代码实现

    //冒泡排序算法
    public static int[] maoPaoSort(int[] initial){
        //temp定义为临时变量
        int temp;
        for (int j = 0; j < initial.length - 1; j++) {
            //每次排序后,下一次排序都会比当前次数少一次,所以直接减j即可
            //假如是从小到大排序,第一次就将最大的排到最右边,第二次只需要将第二大的,排到右边的第二位
            for (int i = 0; i < initial.length - 1 -j; i++) {
                if (initial[i] > initial[i + 1]){
                    //从小到大排序
                    temp = initial[i];
                    initial[i] = initial[i + 1];
                    initial[i+1] = temp;
                }
            }
        }
        return initial;
    }

2、选择排序

选择排序基本思想:第一次从 arr[0]~arr[n-1]中选取最小值, 与 arr[0]交换,第二次从 arr[1]~arr[n-1]中选取最小值,与 arr[1]交换,第三次从 arr[2]~arr[n-1]中选取最小值,与 arr[2] 交换,…,第 i 次从 arr[i-1]~arr[n-1]中选取最小值,与 arr[i-1]交换,…, 第 n-1 次从 arr[n-2]~arr[n-1]中选取最小值, 与 arr[n-2]交换,总共通过 n-1 次,得到一个按排序码从小到大排列的有序序列。

2.1 选择排序代码实现

/**
     *  选择排序算法
     *  遍历数组的所有数,将最小的放到最左边,以此类推
     * @param initial 传入要排序的数组
     * @return 已经排序完的数组
     */
    public static int[] choiceSort(int[] initial){
        /**
         * 假设每次遍历的第一个数就是最小的,将第一个数直接赋值给最小临时变量
         * 直接从数组的第二个数开始遍历,与最小值做比较
         * 每次比较后,将最小值的索引赋值给minIndex,minTemp用来记录最小值
         */
        //minTemp:最小值临时变量
        int minTemp;
        //记录最小值的索引
        int minIndex = 0;
        //temp做数据交换的临时变量
        int temp;
        for (int j = 0; j < initial.length - 1; j++) {
            minTemp = initial[j];
            //j+1是因为每次遍历,都会从上一次遍历出结果,并交换顺序后的下一个数开始比较
            // -j是因为每次遍历,都会比上次少遍历一个
            for (int i = j + 1; i < initial.length - 1 - j; i++) {
                if (initial[i] < minTemp){
                    minIndex = i;
                    minTemp = initial[i];
                }
            }
            //遍历完一次之后,就把这个最小值,和已经排序了的数的下一个数,两个数做交换
            //假如已经排序好了前面两个数,就把最小值的数,和第三个数做交换
            temp = initial[j];
            initial[j] = initial[minIndex];
            initial[j] = temp;
        }
        return initial;
    }

后续更新插入排序、希尔排序、快速排序、归并排序、基数排序、交换排序、堆排序,敬请期待