排序算法之选择排序

1.算法原理

选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思想是每次从未排序部分选择最小(或最大)的元素,并将其放置在已排序部分的末尾。通过多次选择和交换操作,将数列逐渐排序。
选择排序的工作原理如下:
1.遍历数列,将当前位置设为最小值的索引。
2.在未排序部分中,遍历查找比当前最小值还小的元素。如果找到更小的值,更新最小值的索引。
3.完成一次遍历后,将最小值与未排序部分的第一个元素交换位置,将最小值放到已排序部分的末尾。
4.重复步骤2和步骤3,直到遍历完所有元素。

2.代码实现(python)

def select_sort(list):
    n=len(list)
    for i in range(n-1):
        min_inndex=i
        for j in range(i+1,n):
            if list[j]<list[min_inndex]:
                min_inndex=j
            list[min_inndex],list[i]=list[i],list[min_inndex]
    return list

3.代码优化

这里我们想到要去怎么改进算法,优化代码的话,就减少不必要的交换次数吧,就简单增加一个判断,如果最小值的索引不是循环最开始位置记录的索引,我们才交换元素,否则不交换。

def select_sort(list):
    n=len(list)
    for i in range(n-1):
    	#记录最小值下标
        min_inndex=i
        for j in range(i+1,n):
            if list[j]<list[min_inndex]:
                min_inndex=j
        #当前位置不是最小值,进行交换
        if min_index!=i
            list[min_inndex],list[i]=list[i],list[min_inndex]
    return list

4.时空复杂度

时间复杂度:选择排序的最坏情况、平均情况和最好情况时间复杂度均为O(n^2)。
空间复杂度:选择排序的空间复杂度为O(1),只需要一个额外的变量用于交换操作。

5.选择排序的特点

1.不稳定性:选择排序是一种不稳定的排序算法,即相等元素的相对位置可能会改变。
这个地方举个示例:比如数列:2,1,-2,89,(99,1),12,(99,2),10。 (这里用括号括起来的意思是为了区分,第一个99,与第二个99) 然后其实很容易看出,如果我们每次选最大的元素,选到无序数列最后,那么这两个99的先后位置就会发生变化,即经过两次选择之后变成:2,1,-2,89,12,10,(99,2),(99,1)。这个就是表示的不稳定性,即相等元素的相对位置可能会改变。

2.原地排序:选择排序是一种原地排序算法,不需要额外的辅助存储空间。

3.与冒泡排序比较:选择排序相对于冒泡排序,选择排序虽然不稳定,但有一个优点是减少了交换操作的次数。由于每次遍历只进行一次交换,因此选择排序在某些情况下可能比冒泡排序性能稍好。然而,选择排序的时间复杂度仍然是较高的,对于大规模数据的排序效率较低。


第一次写文章,有不对的地方还请大佬们指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值