选择排序详细分析

时间:2021-01-13 15:54:22

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[553]第一次就将第一个[5][3]交换,导致第一个5挪动到第二个5后面)。

(上面是百度出来的,做一个简单的解释:从0索引开始,依次和后面元素比较,小的往前放,第一次比较完,最小值出现在最小索引处) 

规则:

(1)第一次是从0索引开始和其他的进行比较

 第二次是从1索引开始和其他的进行比较

......

(2)最后一次是数组长度-2的元素和数组长度-1的元素进行比较

 详细代码实现:

public class SelectSort {
    public static void main(String[] args) {
        //定义一个数组  int[] arr = {24, 69, 80, 57, 13};
        System.out.println("排序前...");
        printArray(arr);

        //第一次  int x = 0;
        for (int y = 1; y < arr.length; y++) {
            if (arr[y] < arr[x]) {
                int temp = arr[x];
                arr[x] = arr[y];
                arr[y] = temp;
            }
        }

        System.out.println("第一次比较后...");
        printArray(arr);

        //第二次 (此时y初始值为2,我们发现y的初始值始终等于x+1)  x = 1;
        for (int y = x + 1; y < arr.length; y++) {
            if (arr[y] < arr[x]) {
                int temp = arr[x];
                arr[x] = arr[y];
                arr[y] = temp;
            }
        }

        System.out.println("第二次比较后...");
        printArray(arr);

        //第三次  x = 2;
        for (int y = x + 1; y < arr.length; y++) {
            if (arr[y] < arr[x]) {
                int temp = arr[x];
                arr[x] = arr[y];
                arr[y] = temp;
            }
        }

        System.out.println("第三次比较后...");
        printArray(arr);

        //第四次  x = 3;
        for (int y = x + 1; y < arr.length; y++) {
            if (arr[y] < arr[x]) {
                int temp = arr[x];
                arr[x] = arr[y];
                arr[y] = temp;
            }
        }

        System.out.println("第四次比较后...");
        printArray(arr);

        System.out.println("选择排序...");
        selectSort(arr);
        printArray(arr);
    }

    // 遍历功能  public static void printArray(int[] arr) {
        System.out.print("[");
        for (int x = 0; x < arr.length; x++) {
            if (x == arr.length - 1) {
                System.out.print(arr[x]);
            } else {
                System.out.print(arr[x] + ", ");
            }
        }
        System.out.println("]");
    }

    //推算出选择排序算法  public static void selectSort(int[] arr) {
        for (int x = 0; x < arr.length - 1; x++) {
            for (int y = x + 1; y < arr.length; y++) {
                if (arr[y] < arr[x]) {
                    int temp = arr[x];
                    arr[x] = arr[y];
                    arr[y] = temp;
                }
            }
        }
    }

}
打印结果:

选择排序详细分析