排序 1
来源:互联网 发布:战士公主西娜 知乎 编辑:程序博客网 时间:2024/06/06 21:44
参考:
排序 0 - 前言
百度百科:选择排序
选择排序(selection sort)
工作原理
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置(或末尾),直到全部待排序的数据元素排完。
算法思想
设待排序序列大小为 n
,从头到尾共遍历 n-1
次,i
表示当前遍历的次数,也表示已排序序列的终止位置和待排序序列的起始位置,从下标 i
开始在待排序序列中找出最小(或最大)的元素的下标 k
,其值和下标 i
的值进行交换
Python 算法实现
# -*- coding: utf-8 -*-"""选择排序"""import randomdef create_data(leng, min, max): """ 创建待排序序列 :param leng: 序列长度 :param min: 最小值 :param max: 最大值 :return: 列表 """ li = range(min, max) return random.sample(li, leng)def selection_sort(li, reverse=False): """ 选择排序实现 :param li: 待排序列表 :param reverse: 是否从大到小排序,默认为False :return: 已排序列表 """ for i in xrange(len(li) - 1): k = i for j in xrange(i + 1, len(li)): if reverse: if li[k] < li[j]: k = j else: if li[k] > li[j]: k = j li[k], li[i] = li[i], li[k] return liif __name__ == '__main__': da = create_data(10, 30, 60) print da selection_sort(da, True) print da
性能分析
稳定性
选择排序是不稳定排序算法
比如待排序序列为 (4,0),(4,1),(2,2)
第一次遍历后,结果为 (2,2),(4,1),(4,0)
那么值为 4
的两个元素的相对位置在排序完成后发生了变化,所以选择排序是不稳定算法
时间复杂度
基本操作为
... k = i ... ... k = j ... k = j li[k], li[i] = li[i], li[k]return li
T(n) = (n-1) + n*(n-1)/2 + (n-1)
最好,最坏,平均时间复杂度均为 O(n^2)
空间复杂度
仅使用了变量 k
,所以空间复杂度为 O(1)
阅读全文
0 0
- 排序1 冒泡排序
- 排序 : 1 交换排序
- 排序 : 1 交换排序
- 排序(1) -- 冒泡排序
- 排序 - 归并排序 [1]
- 排序1-冒泡排序
- 排序1-选择排序
- 09-排序1 排序
- 排序(1) 初级排序
- 排序1-冒泡排序
- 排序1:冒泡排序
- 排序-1-冒泡排序
- 排序 1 --选择排序
- 排序 - 插入排序 [1 - 直接插入排序]
- 排序(1)--插入排序和交换排序
- 排序1
- 排序1
- 排序1
- VMware安装CentOS 图文教程
- 无序数组求相邻元素最大差值(tiger基金的笔试题)
- 编程的基础
- 华为研发机考笔试题-汽水瓶
- 15算法课程 58. Length of Last Word
- 排序 1
- 【loadrunner】连接mysql并进行操作
- Remmarguts' Date POJ
- CF 868 C. Qualification Rounds 【状态压缩】
- VC环境清屏
- 维基百科启用HTTPS的全球影响
- Zircon building tutorial
- JAVAWEB项目--模拟考试系统数据库设计与实现(二)
- 将一个字符串中的空格全部替换成“%20”