动画演示选择排序(Selection Sort)

简介: 动画演示选择排序(Selection Sort)

1、排序规则

1.1 一句话总结选择排序

数组中第一个数字开始,数组中每个数字都要和后面所有数字比一次大小,每每次循环遍历当前最小值,放在当前循环范围内的最小位置。当完成第 N - 1 次循环之后,排序完成。N = 数组长度 - 1


1.2 排序方法和规则

假设对数组 arr = [1, 4, 7, 3, 5, 8, 9, 2, 10, 6]排序,数组长度为 arr.length,i 为数组下标。


1.假设我们用红色来标记最小值,

2.假设数组中的第 i = 0(索引下标为 0)个元素就是整个数组的最小值,我们暂时先把它标记为红色。

3.为了验证第 i = 0(索引下标为 0)个元素是最小值,他需要和数组中每个元素进行比较。

4.在遍历过程中,如过发现更小值,在遍历完整个数组之前,则暂时先标记新的最小值为红色。

5.继续遍历,重复上一步,直至循环结束,当前红色位置的数字就是最小值。

6.把最小值和当前第一个数字位置调换,因为红色位置的数字更小。‘

7.此时我们完成了一轮循环,整个数组中最小的数字已经找到,我们给它标记为橙色。

8.下面我们开始第二轮循环,找数组中第二小的数字,因为第一小的数字已经找到,所以我们第二轮循环从第 i = 1(索引下标为 1)个数字开始,方法为在除去第一个数字剩下的数字中重复 1-7 步。

9.反复如此,每次循环,可以确定下标在 i 之后的所有元素的最小值,即当前循环的最小值。

10.当完成了 arr.llength -1 次循环遍历之后,选择排序完成。


2、动画演示


网络异常,图片无法展示
|


  • 橙色:每轮循环最终的最小值
  • 红色:每轮循环过程中的临时最小值,当绿色滚动发现更小值的时候,更新临时最小值
  • 蓝色:尚未排序的元素

3、Java 实现

public class 选择排序 {
    public static void main(String[] args) {
        int[] arr = {1, 4, 7, 3, 5, 8, 9, 2, 10, 6};
        // 排序前
        printArr(arr);
        // 排序
        selectSort(arr);
        // 排序后
        printArr(arr);
    }
    private static void printArr(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }
    public static void selectSort(int[] arr) {
        // 0~ N-1
        // 1~ N-1
        // N-2 ~ N-1
        for (int i = 0; i < arr.length; i++) {
            int minValIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                minValIndex = arr[j] < arr[minValIndex] ? j : minValIndex;
            }
            if (minValIndex != i) {
                swap(arr, i, minValIndex);
            }
        }
    }
    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}


相关文章
|
2月前
|
搜索推荐
冒泡排序(Bubble Sort)以及选择排序(Selection Sort)和快速排序(Quick Sort)详细解析
冒泡排序(Bubble Sort)以及选择排序(Selection Sort)和快速排序(Quick Sort)详细解析
26 1
|
7月前
|
搜索推荐 算法 Java
sort-01-bubble sort 冒泡排序算法详解
这是一个关于排序算法的系列文章摘要。作者整理了10种不同的排序算法,包括冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、计数排序、桶排序和大文件外部排序。文章详细介绍了冒泡排序的工作原理、流程,并提供了代码实现,强调了在实现中考虑的改进点,如统一接口、实用性增强和日志输出。此外,还提供了一个排序接口和工具类以方便使用,并通过测试代码和日志展示了排序过程。整个系列旨在帮助读者理解和掌握排序算法。相关代码已开源在GitHub。
|
存储 算法 搜索推荐
python实现【计数排序】(Count Sort)
python实现【计数排序】(Count Sort)
python实现【计数排序】(Count Sort)
|
JavaScript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
44 0
|
搜索推荐 算法 C#
C#选择排序(Selection Sort)算法
C#选择排序(Selection Sort)算法
|
人工智能 算法 搜索推荐
|
搜索推荐 算法 数据可视化
【基础篇】9 # 排序:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)、选择排序(Selection Sort)
【基础篇】9 # 排序:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)、选择排序(Selection Sort)
120 0
【基础篇】9 # 排序:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)、选择排序(Selection Sort)
|
存储 搜索推荐 算法
十大排序之Selection Sort 选择排序
十大排序之Selection Sort 选择排序
104 0
|
JavaScript 前端开发 搜索推荐
不好意思!🍎我真的只会用 Array.prototype.sort() 写✍排序!
不好意思!🍎我真的只会用 Array.prototype.sort() 写✍排序!
79 0
|
图形学
unity实战之循环列表item渐显
循环列表item渐显效果