Java中算法---选择排序

原理每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。(这里只介绍常用的简单选择排序)

简单选择排序的的基本思想:给定的集合数组arr,第一趟排序,假定0位置的值是最小值,在待排序数组arr[1] ~ arrn[n]中逐个比较,选出最小值数的下标,让他与下标为0的数据进行互换位置;第二趟排序,假定1位置的值是最小值,在待排序数组arr[2] ~ arr[n]中逐个比较,选出最小值的下标,让他与位置1的数据进行互换位置。。。。知道全部排序完后完成。

举例说明:一个集合数据为arr = {8, 9, 6, 3, 5, 7}

第一趟排序,假定一开始的最小是0位元素,也就是8。设定一个int型值m用来记录最小值的下标,此时m=0;用arr[m]依次比较arr[1] ~ arr[n]的数值,如果arr[m]大于arr[x]比较的值,则将m的值设置为x;将arr[1] ~ arr[n]的数值全部比较完后,找到arr数组中最小值的下标元素m,将arr[m]的值与一开始假定的最小值arr[0]进行互换位置,就可以得到第一趟排序后的数据结果:[3, 9, 6, 8, 5, 7];

第二趟排序,假定一开始的最小是1位元素,也就是9。设定一个int型值m用来记录最小值的下标,此时m=1;用arr[m]依次比较arr[2] ~ arr[n]的数值,如果arr[m]大于arr[x]比较的值,则将m的值设置为x;将arr[2] ~ arr[n]的数值全部比较完后,找到arr数组中最小值的下标元素m,将arr[m]的值与一开始假定的最小值arr[1]进行互换位置,就可以得到第一趟排序后的数据结果:[3, 5, 6, 8, 9, 7];

第三趟排序,假定一开始的最小是2位元素,也就是6。设定一个int型值m用来记录最小值的下标,此时m=2;用arr[m]依次比较arr[3] ~ arr[n]的数值,如果arr[m]大于arr[x]比较的值,则将m的值设置为x;将arr[3] ~ arr[n]的数值全部比较完后,找到arr数组中最小值的下标元素m,将arr[m]的值与一开始假定的最小值arr[2]进行互换位置,就可以得到第一趟排序后的数据结果:[3, 5, 6, 8, 9, 7];

第四趟排序,假定一开始的最小是3位元素,也就是8。设定一个int型值m用来记录最小值的下标,此时m=3;用arr[m]依次比较arr[34 ~ arr[n]的数值,如果arr[m]大于arr[x]比较的值,则将m的值设置为x;将arr[4] ~ arr[n]的数值全部比较完后,找到arr数组中最小值的下标元素m,将arr[m]的值与一开始假定的最小值arr[3]进行互换位置,就可以得到第一趟排序后的数据结果:[3, 5, 6, 7, 9, 8];

第五趟排序,假定一开始的最小是4位元素,也就是9。设定一个int型值m用来记录最小值的下标,此时m=4;用arr[m]依次比较arr[5] ~ arr[n]的数值,如果arr[m]大于arr[x]比较的值,则将m的值设置为x;将arr[5] ~ arr[n]的数值全部比较完后,找到arr数组中最小值的下标元素m,将arr[m]的值与一开始假定的最小值arr[4]进行互换位置,就可以得到第一趟排序后的数据结果:[3, 5, 6, 7, 8, 9];

代码实现:

/** 选择排序 */
List<Integer> integerList = new ArrayList<>();
List<Integer> newsList = new ArrayList<>();
Integer[] integers = {8, 9, 6, 3, 5, 7};
Collections.addAll(integerList, integers);
System.out.println("排序前:" + integerList);

for(int i=0; i<integerList.size()-1; i++) {
    int m = i;
    for(int j=i+1; j<integerList.size(); j++) {
        // 找出最小的值的下标
        if(integerList.get(m) > integerList.get(j)) {
            m = j;
        }
    }
    //找到最小数值后,互换位置
    if(i != m) {
        int temp = integerList.get(i);
        integerList.set(i, integerList.get(m));
        integerList.set(m, temp);
    }
    System.out.println("第" + (i+1) + "趟排序后:" + integerList);
}
System.out.println("最总排序结果为:" + integerList);

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是王小贱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值