排序算法---选择排序

基本原理

基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

实例演示

在这里插入图片描述

一级目录

第一轮排序:注意for循环i=1,因为第一轮的时候假设最小的数就是第一个,所以比较从第二个数开始,也就是i=1

package com.company.sort;

import java.util.Arrays;

public class SelectorSort {
    //选择排序
    public static void main(String[] args) {
        int[] list={101,34,109,1};
        Selector(list);
    }

    //第一轮排序
    public static void Selector(int[] list){
        //在第一轮排序时,假设最小的就是第一个数
        int minIndex=0;
        int min=list[0];
        //经过for循环之后得到的是最小值的索引minIndex和最小值min
        for(int i=0+1;i<list.length;i++){
            if(list[i]<min){
                //将最小数的信息保存在min,索引为minIndex
                min=list[i];
                minIndex=i;
            }
        }
        //当确定的最小值索引与假设的索引不一致时,将两者交换
        if(minIndex!=0){
            list[minIndex]=list[0];
            list[0]=min;
        }

        System.out.println(Arrays.toString(list));
    }
}

结果:
在这里插入图片描述
三轮排序:该序列里共有四个数,所以要进行四次排序

package com.company.sort;

import java.util.Arrays;

public class SelectorSort {
    //选择排序
    public static void main(String[] args) {
        int[] list={101,34,109,1};
        Selector(list);


    }


    public static void Selector(int[] list){
        //在第一轮排序时,假设最小的就是第一个数
        int minIndex=0;
        int min=list[0];
        //经过for循环之后得到的是最小值的索引minIndex和最小值min
        for(int i=0+1;i<list.length;i++){
            if(list[i]<min){
                //将最小数的信息保存在min,索引为minIndex
                min=list[i];
                minIndex=i;
            }
        }
        //当确定的最小值索引与假设的索引不一致时,将两者交换
        if(minIndex!=0){
            list[minIndex]=list[0];
            list[0]=min;
        }

        System.out.println(Arrays.toString(list));

        //第二轮排序
        minIndex=1;
        min=list[1];
        //经过for循环之后得到的是最小值的索引minIndex和最小值min
        for(int i=1+1;i<list.length;i++){
            if(list[i]<min){
                //将最小数的信息保存在min,索引为minIndex
                min=list[i];
                minIndex=i;
            }
        }
        //当确定的最小值索引与假设的索引不一致时,将两者交换
        if(minIndex!=1){
            list[minIndex]=list[1];
            list[1]=min;
        }

        System.out.println(Arrays.toString(list));


        //第三轮排序
        minIndex=2;
        min=list[2];
        //经过for循环之后得到的是最小值的索引minIndex和最小值min
        for(int i=2+1;i<list.length;i++){
            if(list[i]<min){
                //将最小数的信息保存在min,索引为minIndex
                min=list[i];
                minIndex=i;
            }
        }
        //当确定的最小值索引与假设的索引不一致时,将两者交换
        if(minIndex!=2){
            list[minIndex]=list[2];
            list[2]=min;
        }

        System.out.println(Arrays.toString(list));


    }
}

结果:
在这里插入图片描述
从上述代码可以看出可以用双层for循环完成选择排序:

for(int j=0;j<list.length-1;j++){
     //第j轮就假设最小的是list[i]
       int minIndex=j;
       int min=list[j];
       //经过for循环之后得到的是最小值的索引minIndex和最小值min
       for(int i=j+1;i<list.length;i++){
           if(list[i]<min){
               //将最小数的信息保存在min,索引为minIndex
               min=list[i];
               minIndex=i;
           }
       }
       //当确定的最小值索引与假设的索引不一致时,将两者交换
       if(minIndex!=j){
           list[minIndex]=list[j];
           list[j]=min;
       }

       System.out.println(Arrays.toString(list));
}

结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值