zoukankan      html  css  js  c++  java
  • 【数据结构与算法之美】7.排序算法之冒泡、选择、插入

    package com.ncst.sort;
    
    
    /**
     * @author i
     * @create 2019/12/24 16:39
     * @Description 排序
     * 冒泡排序
     */
    public class Sorts {
    
        /***
         *  冒泡排序
         *  案例: 6 5 4 3 1 2
         *  第一轮
         *      第一次 5 6 4 3 1 2
         *      第二次 5 4 6 3 1 2
         *      第三次 5 4 3 6 1 2
         *      第四次 5 4 3 1 6 2
         *      第五次 5 4 3 1 2 6
         *  第二轮
         *      第一次 4 5 3 1 2 6
         *      第二次 4 3 5 1 2 6
         *      第三次 4 3 1 5 2 6
         *      第四次 4 3 1 2 5 6
         *  第三轮
         *      第一次 3 4 1 2 5 6
         *      第二次 3 1 4 2 5 6
         *      第三次 3 1 2 4 5 6
         *      第四次 3 1 2 4 5 6
         *  第四轮
         *      第一次 1 3 2 4 5 6
         *      第二次 1 2 3 4 5 6
         *      第三次 1 2 3 4 5 6(这里设置一个判断 如果有一次不进行排序 那么整个数组的数据就是有序的)
         *  排序的思想: 两个相邻的元素进行比较,每次选出最大的元素移动至最后 经过多轮操作后 就可以得到一个有序的数组了
         * @param array
         */
        public static void bubbleSort(int[] array) {
            for (int i = 0; i < array.length - 1; i++) {
                boolean flag = true;
                for (int j = 0; j < array.length - i - 1; j++) {
                    if (array[j] > array[j + 1]) {
                        int temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                        flag = false;
                    }
                }
                if (flag)
                    break;
                ;
            }
        }
    
    
        /***
         * 插入排序
         *   数据:6 5 4 3 1 2
         *   第一轮:
         *     第一次:5 6 4 3 1 2   i=1 j=0
         *   第二轮
         *     第一次:4 5 6 3 1 2   i=2 j=1
         *   第三轮
         *     第一次:3 4 5 6 1 2   i=3 j=2
         *   第四轮
         *     第一次  1 3 4 5 6 2   i=4 j=3
         *   第五轮
         *     第一次  1 2 3 4 5 6   i=5 j=4
         *  思路 将要排序的数组 分成已排序和未排序  每次从未排序中取出一个元素 插入到已排序数组对应位置
         * @param array
         *
         */
        public static void insertSort(int[] array) {
            for (int i = 1; i < array.length; i++) {
                int value = array[i];
                int j = i - 1;
                for (; j >= 0; j--) {
                    if (array[j] > value) {
                        array[j+1] = array[j];
                    } else {
                        break;
                    }
                }
                array[j + 1] = value;
            }
        }
    
        /***
         *  选择排序
         *  思路:通过将数组分为已拍好序的数组和未拍好序的数组 分为两组 每次从未拍好序的数组中选择出最小的数 放到已拍好序的数组中
         *  思想和插入是类似 但是插入是选择一个就插入,选择是选择一个最小的插入
         * @param array
         */
        public static void selectSort(int[] array) {
            for (int i = 0; i < array.length-1; i++) {
                int minIndex = i;
                for (int j = i+1; j <array.length ; j++) {
                    if (array[j]<array[minIndex]){
                        minIndex = j;
                    }
                }
                int temp = array[i];
                array[i] = array[minIndex];
                array[minIndex] = temp;
            }
        }
    
        public static void main(String[] args) {
            int[] array = {4, 5, 6, 3, 2, 1};
    
            //bubbleSort(array);
            //insertSort(array);
            //selectSort(array);
            for (int i = 0; i < array.length; i++) {
                System.out.print(array[i] + "	");
            }
    
        }
    
    }
    
  • 相关阅读:
    这些年,产品经理们折腾过的原型工具
    这些年,产品经理们折腾过的原型工具
    这些年,产品经理们折腾过的原型工具
    区块链与微服务天生是一对
    区块链与微服务天生是一对
    区块链与微服务天生是一对
    区块链与微服务天生是一对
    OpenCV和Matlab
    OpenCV和Matlab
    现在最暴利的行业是什么?
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860742.html
Copyright © 2011-2022 走看看