关于程序员:动画演示选择排序算法

40次阅读

共计 1243 个字符,预计需要花费 4 分钟才能阅读完成。

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;
    }
}

本文由 mdnice 多平台公布

正文完
 0