美文网首页
Java简单排序之选择排序

Java简单排序之选择排序

作者: 越努力越幸运阳 | 来源:发表于2020-04-13 18:23 被阅读0次

    排序原理:

    1.每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引处 的值大于其他某个索引处的值,则假定其他某个索引出的值为最小值,最后可以找到最小值所在的索引
    2.交换第一个索引处和最小值所在的索引处的值

    图片展示选择排序.png

    代码实现:

        public static void selectionSort(int[] a) {
            System.out.println("待排序数据: " + Arrays.toString(a));
            for (int i = 0; i < a.length - 1; i++) {
                //默认把数据的第一个元素当做最小值
                int minIndex = i;
                //每次排完序之后,第一个元素就是最小值了,所以每次比较的起始位置为i+1
                for (int j = i + 1; j < a.length; j++) {
                    if (a[minIndex] > a[j]) {
                        //如果有比最小值小的,把当前index赋值给最小值
                        minIndex = j;
                    }
                }
                if (minIndex != i) {//如果最小索引和当前遍历的索引一样,则不需要交换位置
                    int temp = a[i];
                    a[i] = a[minIndex];
                    a[minIndex] = temp;
                }
                System.out.println("第" + (i + 1) + "轮排序后的数组为: " + Arrays.toString(a));
            }
        }
    
    排序结果:
    待排序数据: [4, 5, 6, 3, 2, 1]
    第1轮排序后的数组为: [4, 5, 3, 2, 1, 6]
    第2轮排序后的数组为: [4, 3, 2, 1, 5, 6]
    第3轮排序后的数组为: [3, 2, 1, 4, 5, 6]
    第4轮排序后的数组为: [2, 1, 3, 4, 5, 6]
    第5轮排序后的数组为: [1, 2, 3, 4, 5, 6]
    

    选择排序的时间复杂度分析:

    选择排序使用了双层for循环,其中外层循环完成了数据交换,内层循环完成了数据比较,所以我们分别统计数据 交换次数和数据比较次数:
    数据比较次数:
    (N-1)+(N-2)+(N-3)+...+2+1=((N-1)+1)*(N-1)/2=N^2/2-N/2;
    数据交换次数:
    N-1 时间复杂度:N^2/ 2-N/2+(N-1)=N^2/2+N/2-1;
    根据大O推导法则,保留最高阶项,去除常数因子,时间复杂度为O(N^2);

    相关文章

      网友评论

          本文标题:Java简单排序之选择排序

          本文链接:https://www.haomeiwen.com/subject/ifvnmhtx.html