[排序算法]2. 图解选择排序及其代码实现

选择排序

选择排序就是重复"从待排序的数据中寻找最小值,将其与序列最左边的数字进行交换"这一操作的算法。在序列中寻找最小值时使用的是线性查找。

算法步骤:

1.使用线性查找在数据中寻找最小值, 于是我们找到了最小值1

2.将最小值1与序列最左边的6进行交换,最小值1归位。不过,如果最小值已经在最左端,就不需要任何操作

3.在余下的数据中继续寻找最小值,这次我们找到了最小值2

4.将数字2与左边第二个数字6进行交换, 最小值2归位

5.重复同样操作直到所有数字都归位为止

6.排序完成

解说:

选择排序使用了线性查找来寻找最小值,因此在第1轮中需要比较n-1个数字,第2 轮需要比较 n-2 个数字......到第 n-1轮的时候就只需比较1个数字了。因此,总的比较次数与冒泡排序的相同,都是(n-1)+(n-2)+...+1 ≈ n²/2 次。

每轮中交换数字的次数最多为1次。如果输入数据就是按从小到大的顺序排列的,便不需要进行任何交换。选择排序的时间复杂度也和冒泡排序的一样,都为0(n²)。

代码演示:

python 复制代码
def selection_sort(arr):
    n = len(arr)
    
    # 遍历数组
    for i in range(n):
        # 找到未排序部分的最小元素的索引
        min_idx = i
        for j in range(i+1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j
        
        # 将找到的最小元素与当前位置交换
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    
    return arr

arr = [1,2,3,4,5,6,7,8,9]
selection_sort(arr)
print("排序后的数组:")
print(arr)

文章来源:书籍《我的第一本算法书》

书籍链接:

我的第一本算法书 (豆瓣) (douban.com)

作者:宫崎修一 石田保辉

出版社:人民邮电出版社

ISBN:9787115495242

本篇文章仅用于学习和研究目的,不会用于任何商业用途。引用书籍《我的第一本算法书》的内容旨在分享知识和启发思考,尊重原著作者宫崎修一和石田保辉的知识产权。如有侵权或者版权纠纷,请及时联系作者。

相关推荐
xin(n_n)b30 分钟前
经典题目(3):把数字翻译成字符串;兑换零钱
算法
惊鸿一博38 分钟前
特征匹配+Glue Factory 框架评估特征提取与匹配算法时常用的度量标准
算法·特征匹配
柒和远方43 分钟前
LeetCode 4. 寻找两个正序数组的中位数 —— 二分划分的艺术
javascript·python·算法
z小猫不吃鱼2 小时前
模型剪枝经典论文精读:Channel Pruning for Accelerating Very Deep Neural Networks
算法·机器学习·剪枝
njsgcs2 小时前
已知链中心距用节数算中间电机摆放位置 常量弧长 三链轮弦长模型算法
算法
2601_962440843 小时前
计算机毕业设计之jsp旅游网站管理系统
java·开发语言·算法·课程设计·旅游·推荐算法
一个初入编程的小白3 小时前
数据结构:栈
数据结构
池塘的蜗牛3 小时前
AFDM波形基于DFT的通感一体化
算法
147API4 小时前
Claude global workspace 研究给智能体测试提了一个醒
人工智能·算法·机器学习
葫三生4 小时前
《论三生原理》与模糊数学的关联、异同、互补关系?
人工智能·科技·算法·机器学习·开源