Java算法02-排序

一、冒泡排序

1.算法思想:

两个数比较大小,将较大的数冒到后面(或前面)

2.算法描述:

  1. 比较数组中相邻的两个数,如果前面的数比后面的数大,则交换两个数的位置。

  2. 将一个数组从前到后重复步骤1所做工作,结束时最大的数会排到最后面

  3. 对数组中所有数字重复执行以上步骤,除了每次排到最后的数

  4. 重复执行步骤1~3,直到排序完成,重复次数一般为 数组长度-1

3.动图演示:

4.代码实

/**
 * 1.冒泡排序
 */
public static void bubbleSort(int[] arr) {
    for (int i = 0;i < arr.length - 1;i++) {
        /**
            * 数组从前到后两两比较共需要比较(数组长度-1)次,也就是arr.length - 1次
            * 每次比较出的最大数不参与下次比较,故每次都要比较arr.length - 1 -i次
            */
        for (int j = 0;j < arr.length - 1 - i;j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

结果:

1 2 3 4 5 

二、插入排序

1.算法思想

跟整理扑克牌一样,先假定前n-1个数已经排列好了,将第n个数插入到前面已经排列好的序列中,使得这n个数也排列好顺序,循环反复,直到整个数组排列完毕。

2.算法描述

  1. 从第一个元素开始,该元素可以认为已经被排序;

  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描;

  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置;

  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;

  5. 将新元素插入到该位置后;

  6. 重复步骤2~5。

3.动图演示

插入排序

4.代码实现

/**
 * 2.插入排序
 */
public static void insertSort (int[] arr) {
    for (int i = 1; i < arr.length; i++) {
        int temp = arr[i];
        for (int j = i - 1; j >= 0; j--) {
            if (arr[j] > temp) {
                //如果新元素小于已排序的元素,那么就将该已排序的元素往后移一位
                arr[j + 1] = arr[j];
                //如果新元素比到第0位,那么说明新元素就是最小的元素
                if (j == 0) {
                    arr[0] = temp;
                }
            } else {
                //如果新元素大于已排序的元素,那么就将新元素插入到该已排序的元素的后面
                arr[j + 1] = temp;
                break;
            }
        }
    }
}

三、选择排序

1.算法思想

每次找剩余的数中最小(或最大)的排在前面

2.算法描述

  1. 从第一个数开始,我们暂且认为该数就是有序的数,即最小的数,

  2. 将第一个数与剩余的数依次比较,找出最小的数,将该数与第一个数交换

  3. 每次从有序数列后一位开始执行1~2步,直到排序完成

3.动图演示

4.代码实现

/**
 * 3.选择排序
 */
public static void chooseSort (int[] arr) {
    for (int i = 0; i < arr.length - 1; i++) {
        int min = i;
        for (int j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[min]) {
                min = j;
            }
        }
        int temp = arr[i];
        arr[i] = arr[min];
        arr[min] = temp;
    }
}

参考文章:

https://www.toutiao.com/a6593273307280179715/?iid=6593273307280179715&wid=1620554919795

posted @ 2021-05-09 19:23  TSCCG  阅读(48)  评论(0编辑  收藏  举报