排序算法之选择排序

本文详细介绍了选择排序的步骤、关键代码段及其在动态视图中的应用,探讨了其时间复杂度(O(n^2))、空间复杂度(O(1))以及非稳定性。
摘要由CSDN通过智能技术生成

 选择排序的思想就是,每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完

上面是一段选择排序的动态视图,方便大家更直观的了解,接下来我为大家解释一下每一步

1.首先定义一个 left 和 right 分别指向数组的头和尾,如果 left 大于 right 那么循环条件结束,排序完成

2.分别定义一个最小值的下标和一个最大值的下标,每次开始前都指向 left 下标位置,每循环一次left++,right--,如果当前 i 下标的数字比minIndex下标的数字小,那么让当前 i 下标成为新的minIndex,同理maxIndex也一样

3.有一行代码特别关键并且在动态视图的最开始也体现出来了,就是夹在两个swap函数中间的那段 if 语句(具体见下方代码),如果没有这条语句,那么最开始maxIndex还在left位置,于是minIndex刚和left交换了又要和right交换,那么顺序就乱了,所以这条语句不可或缺

private static void swap(int[] array,int i,int j){
    int tmp = array[i];
    array[i] = array[j];
    array[j] = tmp;
}
public static int[] selectsort(int[] array){
    int left = 0;
    int right = array.length-1;
    while(left<right){
        int minIndex = left;
        int maxIndex = left;
        for (int i = left+1; i <= right; i++) {
            if(array[i] < array[minIndex]){
                minIndex = i;
            }
            if(array[i] > array[maxIndex]){
                maxIndex = i;
            }
        }
        swap(array,left,minIndex);
        if(maxIndex == left){
            maxIndex = minIndex;
        }
        swap(array,right,maxIndex);
    }
    return array;
}
  • 时间复杂度:无论最好、最坏还是平均情况下,选择排序的时间复杂度均为O(n^2),其中n是列表的长度。这是因为每次都要遍历剩余未排序的元素来寻找最小值,且每一轮排序都需要进行n-1次比较。
  • 空间复杂度:选择排序是原地排序算法,不需要额外的存储空间,空间复杂度为O(1)
  • 稳定性:选择排序是不稳定的排序算法。这意味着如果有两个相等的元素,它们的相对位置在排序后可能会改变,因为排序过程中只保证最小(或最大)元素被交换到正确的位置,而不关心相等元素的原始顺序。
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值