选择排序

关于选择排序法

上一篇:冒泡排序

记录一下关于 Java 数组中的另一个简单的算法:选择排序法

算法原理:

假设有一个整型一维数组 a = { 3,1,6,2,5 },要对该数组中的元素进行从小到大的排序。选择排序算法核心思想

每一次从数组中找出最小值(外层每循环一次,找到数组中最小的元素),拿着最小的元素与当前数组最前面的元素交换位置,每次外层循环结束后去除最小的元素(也就是最左边的元素),重复进行下去…**

  • 第一次参与比较的的数据:3 1 6 2 5

第一次循环后的结果:1 3 6 2 5

  • 第二次参与比较的数据:3 6 2 5

第一次循环后的结果:2 6 3 5

  • 第三次参与比较的数据:6 3 5

第一次循环后的结果:3 6 5

  • 第四次参与比较的数据:6 5

第四次循环后的结果:5 6

至此循环结束

冒泡排序 VS 选择排序:

  1. 选择排序比冒泡排序的效率高;

  2. 比较的次数虽然与冒泡排序比较的次数一样;

  3. 冒泡排序存在很多次的无意义交换元素,选择排序每次交换元素总是有意义的(交换次数变少了)。

实现代码:

/**
 *  by YeRun
 */
public class SelectSort {
    
    public static void main(String[] args) {
        
        int[] a = {3,1,6,2,5};  //   5条数据,外层循环四次
        //  最小的元素下标
        int minIndex;
            
        for(int i = 0; i < a.length-1; i++){
            //  一开始假设最小元素就是数组中的第一个元素
            minIndex = i;

            for (int j = i+1; j < a.length; j++) {
                if (a[j] < a[minIndex]){
                    minIndex = j;
                }
            }
            //  这个判断的目的是减少没必要的交换量,不加也可以
            if (minIndex != i){

                int temp = a[minIndex];
                a[minIndex] = a[i];
                a[i] = temp;
            }
        }

        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }
}

结果:

1
2
3
5
6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值