选择排序之python
选择排序( Selection sort)
1.算法描述:
通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录进行交换。
- 对尚未完成排序的所有元素,从头到尾比一遍,记录下最小的那个元素的下标,也就是该元素的位置,
- 把该元素交换到当前遍历的最前面。
- 其效率之处在于,每一轮中比较了很多次,但只交换一次,
- 因此虽然它的时间复杂度也是O(n^2),但比冒泡算法还是要好一点。

2.算法属性:
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
- 稳定性:不稳定
- 不稳定性介绍:list里面重复元素可能会因选择后改变前后顺序
- O(1) 额外的空间
- O(n2 ) 对比
- O(n) 互换
- 不具有适应性:不像冒泡那样可以加flag来改善

3.代码实现
#kumata's code
#算法复杂度O(n^2)
#找到最小的元素就和第一个index交换
#从小到大排 import time
def selection_sort(nums=list):
start = time.time() #第一层选择第n小的元素下标
for i in range(len(nums)): # n
pos_min = i # Index
#第二层遍历找出需要交换的元素下标
for j in range(i + 1,len(nums)):
if nums[pos_min] > nums[j]:
pos_min = j
#交换嘻嘻
nums[i],nums[pos_min] = nums[pos_min],nums[i] t = time.time() - start
return nums,t nums = [1,2,5,8,4,3,6]
selection_sort(nums) #输出结果
([1, 2, 3, 4, 5, 6, 8], 0.0)
选择排序之python的更多相关文章
- 排序算法之选择排序的python实现
选择排序算法的工作原理如下: 1. 首先在序列中找到最小或最大元素,存放到排序序列的前或后. 2. 然后,再从剩余元素中继续寻找最小或最大元素. 3. 然后放到已排序序列的末尾. 4. 以此类推,直到 ...
- 选择排序(Python实现)
目录 1. for版本--选择排序 2. while版本--选择排序 3.测试用例 4. 算法时间复杂度分析 1. for版本--选择排序 def select_sort_for(a_list): ' ...
- 选择排序之python实现
def findsmallestindex(arr): smallnum = arr[0] smallindex = 0 # 寻找最小元素的位置 for i in range(1,len(arr)): ...
- 选择排序的Python代码实现
对于a[0]~a[n]的数组, 默认a[i]最小,和后面的a[i+1]~a[n]进行比较,把最小的和a[i]交换位置,保证本次循环结束后a[i]是上一次未排序的数据中最小的 写法1 a=[12,2,2 ...
- 选择排序算法-python实现
#-*- coding: UTF-8 -*- import numpy as np def SelectSort(a): for i in xrange(0,a.size): min = a[i] p ...
- python算法与数据结构-选择排序算法(33)
一.选择排序的介绍 选择排序(Selection sort)是一种简单直观的排序算法.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素, ...
- 选择排序算法Java与Python实现
Java 实现 package common; public class SimpleArithmetic { /** * 选择排序 * 输入整形数组:a[n] [4.5.3.7] * 1. 取数组编 ...
- 三种排序算法python源码——冒泡排序、插入排序、选择排序
最近在学习python,用python实现几个简单的排序算法,一方面巩固一下数据结构的知识,另一方面加深一下python的简单语法. 冒泡排序算法的思路是对任意两个相邻的数据进行比较,每次将最小和最大 ...
- 你需要知道的九大排序算法【Python实现】之选择排序
一.选择排序 基本思想:选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置.之后再看剩余元素中最小的,放到第二个位置--以此类推,就可以完成整个的排序工作了. ...
随机推荐
- 5 -- Hibernate的基本用法 --2 Hibernate入门
5.2.1 Hibernate 下载和安装 5.2.2 Hibernate 的数据库操作 5.2.3 在Eclipse中使用Hibernate 啦啦啦
- 关于WPF自定义控件(导航)
1.在WPF中自定义控件(1)概述 2.在WPF中自定义控件(2) UserControl 3.在WPF中自定义控件(3) CustomControl (上) 4.在WPF中自定义控件(3) Cust ...
- iOS NSURLSession VS NSURLConnection
NSURLSession VS NSURLConnection NSURLSession可以看做是NSURLConnection的进化版,其对NSURLConnection的改进点有: * 根据每个S ...
- 【RF库Collections测试】Set List Value
Name:Set List ValueSource:Collections <test library>Arguments:[ list_ | index | value ]Sets th ...
- mybatis 之 parameterType="List" 2
<select id="queryGoodsByGoodsNoPcweb" parameterType="List" resultMap="si ...
- GLIBC_2.14报错
[linux]提示"libc.so.6: version `GLIBC_2.14' not found",系统的glibc版本太低 0.以下在系统CentOS 6.3 x86_64 ...
- 基于Cocos2d-x学习OpenGL ES 2.0系列——编写自己的shader(2)
在上篇文章中,我给大家介绍了如何在Cocos2d-x里面绘制一个三角形,当时我们使用的是Cocos2d-x引擎自带的shader和一些辅助函数.在本文中,我将演示一下如何编写自己的shader,同时, ...
- iOS 在已有项目添加CoreData
本文转载至 http://cnbin.github.io/blog/2016/03/11/ios-zai-yi-you-xiang-mu-tian-jia-coredata/ 如果是新项目很好说,新建 ...
- TCP三次握手和四次挥手原理
- Failure to transfer org.springframework.boot:spring-boot-starter-parent:pom:2.0.1.RELEASE from https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempt
第一次用 Spring Starter Project 创建一个Spring应用时,POM 文件报错: Project build error: Non-resolvable parent POM f ...