排序-选择排序SelectSort

一、选择排序思路

简单概括就是从第下标为0的元素开始,假定其为最小的值,然后下标从1到arr.length-1处逐个找比下标为0的值小的数,然后重置这个最小的值,再交换!然后接着下一轮!在这里插入图片描述

二、逐步推导选择排序

package sort;

import java.util.Arrays;

public class SelectSort {
    //选择排序时间复杂度为O(n2)
    public static void main(String[] args){
        int arr[] = {101,34, 119, 1};

        System.out.println("原始的数组:"+ Arrays.toString(arr));
        System.out.println("开始进行选择排序...");
        SelectSort(arr);
        System.out.println("选择排序完成!!!");
        System.out.println("选择排序侯的数组:"+ Arrays.toString(arr));

    }
    public static void SelectSort(int[] arr){

        /**
         * 第1轮
         */

        //假定索引为0处的值为最小值,即arr[0] = minValue
        int minIndex = 0;//假定0处索引对应的值为最小值
        int minValue = arr[0];

        //遍历查询最小值
        for (int j = 0+1;j<arr.length;j++){
            if (arr[j] < minValue){
                minValue = arr[j];//重置最小值
                minIndex = j;//重置索引
            }
        }
        if (minIndex !=0){
            //将找到的最小值与arr[0]交换。
            arr[minIndex] = arr[0];//arr[0]的值给arr[minIndex]
            arr[0] = minValue;//将最小值给arr[0]
        }
        System.out.println("第一轮排序:"+ Arrays.toString(arr));


        /**
         * 第2轮
         */
        //假定索引为1处的值为最小值,即arr[1] = minValue
        minIndex = 1;//假定1处索引对应的值为最小值
        minValue = arr[1];
        //遍历查询最小值
        for (int j = 1+1;j<arr.length;j++){
            if (arr[j] < minValue){
                minValue = arr[j];//重置最小值
                minIndex = j;//重置索引
            }
        }

        if (minIndex != 1){
            //将找到的最小值与arr[1]交换。
            arr[minIndex] = arr[1];//arr[1]的值给arr[minIndex]
            arr[1] = minValue;//将最小值给arr[1]
        }


        System.out.println("第二轮排序:"+ Arrays.toString(arr));

        /**
         * 第3轮
         */
        //假定索引为2处的值为最小值,即arr[2] = minValue
        minIndex = 2;//假定1处索引对应的值为最小值
        minValue = arr[2];
        //遍历查询最小值
        for (int j = 2+1;j<arr.length;j++){
            if (arr[j] < minValue){
                minValue = arr[j];//重置最小值
                minIndex = j;//重置索引
            }
        }

        if (minIndex != 2){
            //将找到的最小值与arr[1]交换。
            arr[minIndex] = arr[2];//arr[2]的值给arr[minIndex]
            arr[2] = minValue;//将最小值给arr[2]
        }


        System.out.println("第三轮排序:"+ Arrays.toString(arr));



    }
}

截图
在这里插入图片描述

三、选择排序实现

采用Scanner键入获取所要排序的数组长度和数

package sort;

import java.util.Arrays;
import java.util.Scanner;

public class SelectSort {
    //选择排序时间复杂度为O(n^2)
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入排序数组长度:");
        int n = scanner.nextInt();

        System.out.println("请输入所要排序的数(以enter键结束):");
        int[] arr = new int[n];
        //依次将每个键入的数,存在arr数组中
        for (int i=0 ; i<arr.length;i++){
        arr[i] = scanner.nextInt();
        }


        System.out.println("原始的数组:"+ Arrays.toString(arr));
        System.out.println("开始进行选择排序...");
        SelectSort(arr);
        System.out.println("选择排序完成!!!");
        System.out.println("选择排序侯的数组:"+ Arrays.toString(arr));

    }
    public static void SelectSort(int[] arr){
        //执行次数为arr.length-1次
        for (int i = 0 ;i<arr.length-1 ; i++){
            //假定索引i处的值为最小值,即arr[i] = minValue
            int minIndex = i;//假定i处索引对应的值为最小值
            int minValue = arr[i];

            //遍历查询最小值
            for (int j = i+1;j<arr.length;j++){
                if (arr[j] < minValue){
                    minValue = arr[j];//重置最小值
                    minIndex = j;//重置索引
                }
            }
            if (minIndex !=i){
                //将找到的最小值与arr[i]交换。
                arr[minIndex] = arr[i];//arr[i]的值给arr[minIndex]
                arr[i] = minValue;//将最小值给arr[i]
            }
            System.out.println("第"+(i+1)+"轮排序:"+ Arrays.toString(arr));
        }



    }
}

截图
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值