选择排序算法

选择排序是改进了冒泡排序,将交换次数从O(N²)减少到O(N),不幸的是比较次数还是O(N)²,然而选择排序仍然为打记录量的排序提供了一个非常重要的改进,因为这些大量的记录需要在内存中移动,这就使交换的时间和比较的时间相比起来,交换的时间更为重要(一般来说 java语言中不是这种情况,java只是改变了引用的位置,而实际对象的位置并没有发生改变)

选择排序算法的简述

通俗的说法就是把数组里面最小的选出来放到数组的最前面,所以说第一次选出来的是最小的,第二次选出来的是第二小的,依次…
例如
例如:45 80 48 40 22 78
第一轮:45 80 48 40 22 78 —> 22 80 48 40 45 78 i=0
第二轮:22 80 48 40 45 78 —> 22 40 48 80 45 78 i=1
第三轮:22 40 48 80 45 78 —> 22 40 45 80 48 78 i=2
第四轮:22 40 45 80 48 78 —> 22 40 45 48 80 78 i=3
第五轮:22 40 45 48 80 78 —> 22 40 45 48 78 80 i=4
黄色的代表的次轮需要排序的需要的元素 黄色的左边是已经排序好了的,右边是在等待排序的

        int[] arr = {12, 102, 28, 78, 45, 63, 45, 21, 4, 1, 52, 49, 88, 36, 2, 35, 61, 44, 66, 46};
        for (int i = 0; i < arr.length - 1; i++) {//第一步和冒泡排序一样
//            假设最小的为第一位也就是下标0
            int min = i;
            for (int j = i + 1; j < arr.length; j++) {//j就是第二位 下标为1

                if (arr[j] < arr[min]) {//判断下标 如果下标为j的数小于下标为0的数则记录下来
                    min = j;
                }
            }
            if (arr[i] > arr[min]) {//选择排序第一轮结束时 判断选择出来的最小的数和下标为0的数进行比较 和冒泡排序的时候一样
                int temp = arr[i];
                arr[i] = arr[min];
                arr[min] = temp;
            }
        }
        for (int k:arr){
            System.out.print(k+",");
        }

输出
在这里插入图片描述
经上面的代码可以总结一下
选择排序和冒泡排序执行了相同的次数比较,N(N-1)/2,假设有10个数据项,则会进行45次比较,然而,10个数据项只需要少于10次的交换,如果对于100个数据项,就是4950次比较,但是只进行了不到100次的交换,N值很大时,比较的次数是最重要的,所以虽然和冒泡排序一样的O(N²),但是选择排序无疑更快,因为交换的次数小得多,当N值较小时,特别是交换的时间级别比较的时间级别大得多时,选择排序实际上是相当快的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值