动画学选择排序

Kenisha ·
更新时间:2024-09-20
· 578 次阅读

内容介绍

前言

选择排序的思想

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

选择排序动画演示

选择排序分析

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

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

第一轮交换前图示:

第一轮交换后图示:

第二轮交换前图示:

第二轮交换后图示:

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

第五轮交换前图示:


第五轮交换后图示:

选择排序代码编写

我们分析了选择排序的原理,发现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] 总结 选择排序的原理:第一次从待排序的数据中选出最小的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。 选择排序在写代码时需要使用两个循环:外循环控制比较的轮数,内循环找到最小值

---------- End ---------- 原创文章和动画制作真心不易,您的点赞就是最大的支持!



作者:动画学编程



选择排序 选择 排序 动画

需要 登录 后方可回复, 如果你还没有账号请 注册新账号