所谓选择排序,就是第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。

以此类推,直到全部待排序的数据元素的个数为零。

选择排序是不稳定的排序方法。

具体步骤:

1.在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

2.从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

3.重复第二步,直到所有元素均排序完毕。

具体代码如下:

第一次排序结果

package demo.array;

import java.util.Arrays;

public class SelectSort {
    public static void main(String[] args) {
        int[] arr = {10,8,12,5,20};
        //选择排序
        //第一次

        int minIndex = 0;
        int min = arr[0];
        for(int j=1+0;j<arr.length;j++){
            if(min > arr[j]){
                min=arr[j];
                minIndex = j;
            }
        }
        arr[minIndex] = arr[0];
        arr[0] = min;
        System.out.println("第一次排序结果");
        System.out.println(Arrays.toString(arr));

    }

}

第二次,第三次,第四次一次排序结果如下:

package demo.array;

import java.util.Arrays;

public class SelectSort {
    public static void main(String[] args) {
        int[] arr = {10,8,12,5,20};
        //选择排序
        //第一次

        int minIndex = 0;
        int min = arr[0];
        for(int j=1+0;j<arr.length;j++){
            if(min > arr[j]){
                min=arr[j];
                minIndex = j;
            }
        }
        arr[minIndex] = arr[0];
        arr[0] = min;
        System.out.println("第一次排序结果");
        System.out.println(Arrays.toString(arr));

        minIndex = 1;
        min = arr[1];
        for(int j=1+1;j<arr.length;j++){
            if(min > arr[j]){
                min=arr[j];
                minIndex = j;
            }
        }
        arr[minIndex] = arr[1];
        arr[1] = min;
        System.out.println("第二次排序结果");
        System.out.println(Arrays.toString(arr));


        minIndex = 2;
        min = arr[2];
        for(int j=1+2;j<arr.length;j++){
            if(min > arr[j]){
                min=arr[j];
                minIndex = j;
            }
        }
        arr[minIndex] = arr[2];
        arr[2] = min;
        System.out.println("第三次排序结果");
        System.out.println(Arrays.toString(arr));

        minIndex = 3;
        min = arr[3];
        for(int j=1+3;j<arr.length;j++){
            if(min > arr[j]){
                min=arr[j];
                minIndex = j;
            }
        }
        arr[minIndex] = arr[3];
        arr[3] = min;
        System.out.println("第四次排序结果");
        System.out.println(Arrays.toString(arr));

    }

}

 

根据几次运行规律通过双层for循环实现整体代码

package demo.array;

import java.util.Arrays;

public class SelectSort {
    public static void main(String[] args) {
        int[] arr = {10,8,12,5,20};

        selectSort(arr);

        //选择排序
        //第一次

//        int minIndex = 0;
//        int min = arr[0];
//        for(int j=1+0;j<arr.length;j++){
//            if(min > arr[j]){
//                min=arr[j];
//                minIndex = j;
//            }
//        }
//        arr[minIndex] = arr[0];
//        arr[0] = min;
//        System.out.println("第一次排序结果");
//        System.out.println(Arrays.toString(arr));
//
//        minIndex = 1;
//        min = arr[1];
//        for(int j=1+1;j<arr.length;j++){
//            if(min > arr[j]){
//                min=arr[j];
//                minIndex = j;
//            }
//        }
//        arr[minIndex] = arr[1];
//        arr[1] = min;
//        System.out.println("第二次排序结果");
//        System.out.println(Arrays.toString(arr));
//
//
//        minIndex = 2;
//        min = arr[2];
//        for(int j=1+2;j<arr.length;j++){
//            if(min > arr[j]){
//                min=arr[j];
//                minIndex = j;
//            }
//        }
//        arr[minIndex] = arr[2];
//        arr[2] = min;
//        System.out.println("第三次排序结果");
//        System.out.println(Arrays.toString(arr));
//
//        minIndex = 3;
//        min = arr[3];
//        for(int j=1+3;j<arr.length;j++){
//            if(min > arr[j]){
//                min=arr[j];
//                minIndex = j;
//            }
//        }
//        arr[minIndex] = arr[3];
//        arr[3] = min;
//        System.out.println("第四次排序结果");
//        System.out.println(Arrays.toString(arr));

    }

    public static void selectSort(int[] arr){
        for(int i=0;i<arr.length;i++){
            int minIndex = i;
            int min = arr[i];
            for(int j=1+i;j<arr.length;j++){
                if(min > arr[j]){
                    min=arr[j];
                    minIndex = j;
                }
            }
            arr[minIndex] = arr[i];
            arr[i] = min;
        }
        System.out.println("排序结果");
        System.out.println(Arrays.toString(arr));
    }

}

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐