(菜鸟也学大数据)20200714-十大排序算法中的冒泡排序 / 选择排序 / 插入排序

排序动图选自https://www.cnblogs.com/onepixel/articles/7674659.html该文有完整版本的算法介绍有兴趣的可以去看一下

一.冒泡排序

  1. 冒泡排序的逻辑是,将一个数组两两比较,如果不符合顺序就进行位置调换,在依次往下重复执行,当第一轮结束时,最后一位一定是最大,或者最小值。然后进行第二轮对比,已经确定的值,则不需要在进行对比
    在这里插入图片描述

2.代码实现

import java.util.Arrays;

/**
 * @ Author: Zhangyu
 * @ Date: 2020/7/15
 * @ Description:冒泡排序(优化版)
 */
public class Teat1 {
    public static void main(String[] args) {
        int[] a={9,1,3,5,7,};
        for (int i = 0; i <a.length-1; i++) {//一共需要执行数组长度减1次的循环
            boolean b=false;//创建一个标志位,来判断当一个循环结束都没有换位,说明该数组已经有序,无需在执行
            for (int j = 0; j <a.length-1-i; j++) {//每一轮需要执行数组长度减1在减去已完成排序的末尾数值
                if (a[j+1]>a[j]){//如果后一位大于当前位则进行换位操作
                    int tmp=a[j+1];
                    a[j+1]=a[j];
                    a[j]=tmp;
                    b=true;//标志更改,提示有换位操作
                }
            }
            if (!b){//判断是否有换位操作,如果没有,说明已经有序,无需在执行
                break;
            }
        }
        System.out.println(Arrays.toString(a));//最后打印排序好的数组
    }
}

二.选择排序

2.选择排序的逻辑是,先选定基准位,在依次与数组其他值对比,如果找到需要换位操作的数据,则先保存该数据的位置,再将该位置的数据与剩下数据进行比较,直到该轮比较结束,确定出最后需要换位的数据,进行换位,此时基准位的数据就完成了,在依次向后循环操作,直到所有数据都排序完成
在这里插入图片描述

package Work_SFpaixu;

import java.util.Arrays;

/**
 * @ Author: Zhangyu
 * @ Date: 2020/7/14
 * @ Description:选择排序
 */
public class Work1 {
    public static void main(String[] args) {
        int[] a={2,4,7,1,5};
        for (int i = 0; i < a.length-1; i++) {
            int min=i;//用变量保存需要排序基准位
            boolean scores=true;//设置一个标志位,如果该循环结束都没有需要找到需要换位的数据,则不需要进行换位
            for (int j =i+1; j < a.length; j++) {
                if (a[j]<a[min]){//判断后面是否还有比min更小的,如果有就将其保存下来
                    min=j;
                    scores=false;//更改标志位,
                }
            }
            //循环结束后,进行转换
            if (!scores) {
                int tmp=a[i];
                a[i]=a[min];
                a[min]=tmp;
            }
        }
        System.out.println(Arrays.toString(a));//输出排序后的数组

    }
}

三.插入排序

  1. 插入排序的逻辑是,先确定基准位,将基准位依次与前一位进行比较,若不符合顺序,则将前一位后移,直到符合顺序后,将基准位放入确定符合顺序那个数值的后一位,该轮结束,进行下一轮排序,直到数组排序完成
    在这里插入图片描述
package Work_SFpaixu;

import java.util.Arrays;

/**
 * @ Author: Zhangyu
 * @ Date: 2020/7/14
 * @ Description:插入排序
 */
public class Work3 {
    public static void main(String[] args) {
        int[] a={2,4,6,1,8};
        for (int i = 1; i <a.length-1; i++) {//总共需要排序总数-1个数字
            int num=a[i];//保存当前需要排序的数字
            boolean tmp=false;//标志位,如果在下面循环以及完成排序,则不再需要额外操作,如果判断结束,也没有找到比自己小的数时,需要额外操作,将该数字保存的最前面
            for (int j = i; j >0 ; j--) {
                if (num<a[j-1]){//如果该数字的前一位比自己大,则将前一位往后移一位
                    a[j]=a[j-1];
                }else{//如果找到比自己小的,则在比自己小的后面插入。并标记已完成插入
                    a[j]=num;
                    tmp=true;
                    break;
                }
            }
            if (!tmp){//如果循环结束没有找到比自己小的,就把该数插入第一位
                a[0]=num;
            }
        }
        System.out.println(Arrays.toString(a));
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_38468167/article/details/107375886