动画:一篇文章快速学会选择排序

内容介绍

选择排序的思想

第一次从待排序的数据中选出最小的一个元素,存放在序列的起始位置,而后再从剩余的未排序元素中寻找到最小元素,而后放到已排序的序列的末尾。以此类推,直到所有待排序的数据元素的个数为零。java

选择排序动画演示

选择排序分析

通常没有特殊要求排序算法都是升序排序,小的在前,大的在后。 数组由{6, 5, 4, 1, 3, 2}这6个无序元素组成。算法

选择排序原理:找到这轮的最小值,放到最左边。编程

第一轮交换前图示: 数组

第一轮交换后图示:微信

第二轮交换前图示: 动画

第二轮交换后图示: code

中间第三轮第四轮过程相似,省略。blog

第五轮交换前图示: 排序

第五轮交换后图示: io

选择排序代码编写

咱们分析了选择排序的原理,发现6个元素须要比较5轮,须要经过一个循环来控制,并且比较的轮数是元素的数量-1。每轮又须要在剩下的元素中找出最小值,也须要使用一个循环。所以须要使用嵌套循环来实现。

代码以下:

public class SelectionSortTest {
    public static void main(String[] args) {
        int[] arr = new int[]{6, 5, 4, 1, 3, 2};

        selectionSort(arr);
    }

    // 第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,
    // 而后再从剩余的未排序元素中寻找到最小元素,而后放到已排序的序列的末尾。
    // 以此类推,直到所有待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
    // 选择排序每轮必须遍历完后面的全部元素才能肯定一个最小值.
    public static void selectionSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) { // 外循环控制比较的轮数
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) { // 内循环找到最小值
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }

            int temp = arr[minIndex];
            arr[minIndex] = arr[i];
            arr[i] = temp;
            System.out.println("第" + (i + 1) + "轮比较后: " + Arrays.toString(arr));
        }
    }
}

运行效果以下:

第1轮比较后: [1, 5, 4, 6, 3, 2]
第2轮比较后: [1, 2, 4, 6, 3, 5]
第3轮比较后: [1, 2, 3, 6, 4, 5]
第4轮比较后: [1, 2, 3, 4, 6, 5]
第5轮比较后: [1, 2, 3, 4, 5, 6]

总结

  1. 选择排序的原理:第一次从待排序的数据中选出最小的一个元素,存放在序列的起始位置,而后再从剩余的未排序元素中寻找到最小元素,而后放到已排序的序列的末尾。以此类推,直到所有待排序的数据元素的个数为零。
  2. 选择排序在写代码时须要使用两个循环:外循环控制比较的轮数,内循环找到最小值

原创文章和动画制做真心不易,您的点赞就是最大的支持! 想了解更多文章请关注微信公众号:表哥动画学编程

相关文章
相关标签/搜索