十种经典排序算法 Java版 注释讲解


数据源与打印方法

        int[] nums = new int[]{
    
    14, 1, 2, 10, 3, 13, 11, 4, 12, 5, 6, 0, 7, 16, 8, 9, 15};
        System.out.println(Arrays.toString(nums));

1. 冒泡算法

        int[] nums = new int[]{
    
    14, 1, 2, 10, 3, 13, 11, 4, 12, 5, 6, 0, 7, 16, 8, 9, 15};
        //冒泡排序
        for(int i=0;i<nums.length-1;++i){
    
    
            for(int j=i+1;j<nums.length;++j){
    
    
                if(nums[i]>nums[j]){
    
    
                    int num=nums[j];
                    nums[j]=nums[i];
                    nums[i]=num;
                }
            }
        }
        System.out.println(Arrays.toString(nums));

2. 选择排序

        int[] nums = new int[]{
    
    14, 1, 2, 10, 3, 13, 11, 4, 12, 5, 6, 0, 7, 16, 8, 9, 15};
        //选择排序
        for(int i=0;i<nums.length-1;++i){
    
    
            int min=i;
            for(int j=i+1;j<nums.length;++j){
    
    
                if(nums[min]>nums[j]){
    
    
                    min=j;
                }
            }
            //交换
            int num=nums[i];
            nums[i]=nums[min];
            nums[min]=num;
        }
        System.out.println(Arrays.toString(nums));

3. 插入排序

        //插入排序
        for(int i=1;i<nums.length;++i){
    
    
            //待插入的数值 nums[i]
            //在已经插入的队伍中找到自己位置,从【0~i】

            //判断是不是已知有序数组中最小的那个
            //判断条件:目标i是最小的,吧i-1之前的所有数据右移一位。
            if(nums[0]>nums[i]) {
    
    
                System.out.println("打印当前数据    " + Arrays.toString(nums));
                System.out.printf("目标i是最小的,吧i-1之前的所有数据右移一位\n", i - 1);
                int num = nums[i];
                for (int n = i; n > 0; --n) {
    
    
                    nums[n] = nums[n - 1];
                }
                nums[0] = num;
            }else{
    
    
                //目标i不是最小的,需要在已知数据里遍历寻找位置
                for(int j=0;j<i;++j){
    
    
                    if(nums[j]<nums[i] && nums[i]<=nums[j+1]){
    
    
                        //找到插入位置,开始后移排序
                        //从下表j+1开始后移1,直到有人移动到了i。
                        System.out.println("打印当前数据    "+Arrays.toString(nums));
                        System.out.printf("从%d - %d位置开始移动\n",j+1,i);
                        int num=nums[i];
                        for(int n=i;n>j+1;--n){
    
    
                            nums[n]=nums[n-1];
                        }
                        nums[j+1]=num;
                        break;
                    }
                }
            }
        }

猜你喜欢

转载自blog.csdn.net/qq_44627608/article/details/123380751