冒泡 选择 插入 交换排序算法 分析

package sort;

/**
 * 给予比较法的 排序算法 冒泡 插入 选择
 * 关于排序算法的 衡量
 * <p>
 * 最好 最坏 平均时间复杂度
 * 同级别算法的 系数常数低阶
 * 比较或者移动的次数
 * <p>
 * Describe:
 * Author: 九霄道长
 * CreateTime: 2021/12/3 14:08
 */

public class Sort {

    public static int[] array = {1, 5, 3, 6, 4, 2};

    // 最好 On 级别 平均 最坏 On2 级别
    // 冒泡排序,a表示数组,n表示数组大小
    public static void bubbleSort(int[] a, int n) {
        //数组长度小于等于1 则直接返回
        if (n <= 1) {
            return;
        }

        //外层循环  控制循环次数
        for (int i = 0; i < n; i++) {
            boolean flag=false;
            //里层缓存控制 循环了第几次  以及最后的几个元素不用再去比较
            for (int j = 0; j < n - 1 - i; j++) {
                if (a[j] > a[j + 1]) {
                    int temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                    flag = true;
                }
            }
            //说明没有数据交换 直接返回即可
            if (!flag) {
                return;
            }
        }
        for (int i = 0; i < n; i++) {
            System.out.println(a[i]);
        }

    }
    // 最好 On 级别 平均 最坏 On2 级别
    // 插入排序,a表示数组,n表示数组大小
    public static void insertionSort(int[] a, int n) {
        if (n <= 1) {
            return;
        }
        //外层循环控制 循环次数
        for (int i = 1; i <n ; i++) {
            int j=i-1; // j 是已经排序的区间
            int value=a[i]; //要排序的 值
            for (; j >=0 ; j--) { //在已排序的区间内比较
                if (a[j]>value){
                    a[j+1]=a[j]; //数据交换 把大的值向后移动
                }else {
                    break;
                }
            }
            // 值该被插入的地方
            a[j+1]=value;
        }
        for (int i = 0; i <n ; i++) {
            System.out.println(a[i]);
        }
    }
    // 最好 On2 级别 平均 最坏 On2 级别
    public static void selectionSort(int[] a , int n){
        if (n<1){
            return;
        }
        //控制循环次数
        for (int i = 0; i <n ; i++) {
            //当前的最小值默认为 i
            int min =i;
            //内层比较 从 i的下一个开始 i以前的是已经排好序的
            for (int j = i+1; j < n; j++) {
                if (a[j]<a[min]){
                    min=j;//交换坐标 找出最小值
                }
            }
            //找出最小值后判断是否成立交换位置
            if (i!=min){
                int temp =a[min];
                a[min] = a[i];
                a[i]=temp;

            }
        }
        for (int i = 0; i < n; i++) {
            System.out.println(a[i]);
        }
    }
    public static void main(String[] args) {

        selectionSort(array, array.length);
    }
}
学取进之以为乐
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!