算法:用Java实现冒泡排序(BubbleSort)、插入排序(InsertSort)、选择排序(SelectSort)

接下来我准备发表一系列关于排序的算法,本文我准备用Java实现冒泡排序、插入排序、选择排序。具体的排序算法过程已经在注释里面了,大家可看注释,也可复制代码到IDE里面,用DEBUG模式研究算法的过程:

1、冒泡排序(BubbleSort):

import java.util.Arrays;

/**
 * @author LiYang
 * @ClassName BubbleSort
 * @Description 冒泡排序算法
 * @date 2019/11/4 11:14
 */
public class BubbleSort {

    /**
     * 冒泡排序算法(BubbleSort):
     * 每次排序,从左到右两两依次比较,
     * 保证将较大的数放在两两的右边,
     * 一次遍历,就将遍历区最大数放到了最右边。
     * 然后再两两比较上一次最大数的左边区域
     * @param arr 待排序数组
     */
    public static void bubbleSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - i - 1; j++) {
                //一次交换,就是大数往右冒一下泡
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

    /**
     * 运行冒泡排序算法
     * @param args
     */
    public static void main(String[] args) {
        //待排序数组
        int[] arr = {3,6,4,2,5,1,9,8,7,0};
        
        //打印待排序数组
        System.out.println("冒泡排序前:" + Arrays.toString(arr));
        
        //进行冒泡排序
        bubbleSort(arr);
        
        //打印冒泡排序后的数组
        System.out.println("冒泡排序后:" +Arrays.toString(arr));
    }
    
}

运行 BubbleSort 类的main方法,冒泡排序算法测试通过:

冒泡排序前:[3, 6, 4, 2, 5, 1, 9, 8, 7, 0]
冒泡排序后:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

2、插入排序(InsertSort):

import java.util.Arrays;

/**
 * @author LiYang
 * @ClassName InsertSort
 * @Description 插入排序算法
 * @date 2019/11/4 11:20
 */
public class InsertSort {

    /**
     * 插入排序算法(InsertSort):
     * 将排序数组分为两个区域:左边乱序区和右边有序区
     * 逐渐将左边乱序区的元素,依次与右边有序区比较
     * 如果遇到比自己小的,就继续往右前进,直到插入到
     * 刚好比自己大的元素的左边
     * @param arr 待排序数组
     */
    public static void insertSort(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = arr.length - i - 1; j < arr.length - 1; j++){
                //如果还没遇到有序区刚好比自己大的元素,则交换前进
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    
                //遇到了刚好比自己大的元素,表示已插入正确的位置,停下
                } else {
                    break;
                }
            }
        }
    }

    /**
     * 运行插入排序算法
     * @param args
     */
    public static void main(String[] args) {
        //待排序数组
        int[] arr = {3,6,4,2,5,1,9,8,7,0};

        //打印待排序数组
        System.out.println("插入排序前:" + Arrays.toString(arr));

        //进行插入排序
        insertSort(arr);

        //打印插入排序后的数组
        System.out.println("插入排序后:" +Arrays.toString(arr));
    }
    
}

运行 InsertSort 类的main方法,插入排序算法测试通过:

插入排序前:[3, 6, 4, 2, 5, 1, 9, 8, 7, 0]
插入排序后:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

3、选择排序(SelectSort):

import java.util.Arrays;

/**
 * @author LiYang
 * @ClassName SelectSort
 * @Description 选择排序算法
 * @date 2019/11/4 11:26
 */
public class SelectSort {

    /**
     * 选择排序算法(SelectSort):
     * 依次将从左到右的元素进行选择,如果后面的元素
     * 有比自己小的,则选择与之交换,然后再往后比,
     * 又遇到更小的,又与之交换。遍历完一遍后,左边
     * 的元素就是最小的了,这个的位置就定了,然后右边
     * 的下一个又继续往右边比,又选出第二小的,以此类推
     * @param arr 待排序数组
     */
    public static void selectSort(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                //注意这里的下标,小的元素都是与arr[i]交换
                //最后arr[i]就是选出来的最小的元素
                if (arr[j] < arr[i]) {
                    int temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                }
            }
        }
    }

    /**
     * 运行选择排序算法
     * @param args
     */
    public static void main(String[] args) {
        //待排序数组
        int[] arr = {3,6,4,2,5,1,9,8,7,0};

        //打印待排序数组
        System.out.println("选择排序前:" + Arrays.toString(arr));

        //进行选择排序
        selectSort(arr);

        //打印选择排序后的数组
        System.out.println("选择排序后:" +Arrays.toString(arr));
    }
    
}

运行 SelectSort 类的main方法,选择排序算法测试通过:

选择排序前:[3, 6, 4, 2, 5, 1, 9, 8, 7, 0]
选择排序后:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章