选择排序( 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的更多相关文章

  1. 排序算法之选择排序的python实现

    选择排序算法的工作原理如下: 1. 首先在序列中找到最小或最大元素,存放到排序序列的前或后. 2. 然后,再从剩余元素中继续寻找最小或最大元素. 3. 然后放到已排序序列的末尾. 4. 以此类推,直到 ...

  2. 选择排序(Python实现)

    目录 1. for版本--选择排序 2. while版本--选择排序 3.测试用例 4. 算法时间复杂度分析 1. for版本--选择排序 def select_sort_for(a_list): ' ...

  3. 选择排序之python实现

    def findsmallestindex(arr): smallnum = arr[0] smallindex = 0 # 寻找最小元素的位置 for i in range(1,len(arr)): ...

  4. 选择排序的Python代码实现

    对于a[0]~a[n]的数组, 默认a[i]最小,和后面的a[i+1]~a[n]进行比较,把最小的和a[i]交换位置,保证本次循环结束后a[i]是上一次未排序的数据中最小的 写法1 a=[12,2,2 ...

  5. 选择排序算法-python实现

    #-*- coding: UTF-8 -*- import numpy as np def SelectSort(a): for i in xrange(0,a.size): min = a[i] p ...

  6. python算法与数据结构-选择排序算法(33)

    一.选择排序的介绍 选择排序(Selection sort)是一种简单直观的排序算法.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素, ...

  7. 选择排序算法Java与Python实现

    Java 实现 package common; public class SimpleArithmetic { /** * 选择排序 * 输入整形数组:a[n] [4.5.3.7] * 1. 取数组编 ...

  8. 三种排序算法python源码——冒泡排序、插入排序、选择排序

    最近在学习python,用python实现几个简单的排序算法,一方面巩固一下数据结构的知识,另一方面加深一下python的简单语法. 冒泡排序算法的思路是对任意两个相邻的数据进行比较,每次将最小和最大 ...

  9. 你需要知道的九大排序算法【Python实现】之选择排序

    一.选择排序 基本思想:选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置.之后再看剩余元素中最小的,放到第二个位置--以此类推,就可以完成整个的排序工作了. ...

随机推荐

  1. WPF路由事件学习(一)

    路由事件与一般事件的区别在于:路由事件是一种用于元素树的事件,当路由事件触发后,它可以向上或向下遍历可视树和逻辑树,他用一种简单而持久的方式在每个元素上触发,而不需要任何定制的代码(如果用传统的方式实 ...

  2. iOS in-app purchase详解

    in-app purchase教程: http://www.appcoda.com/in-app-purchase-tutorial/ 3.后台服务器验证收据的正确性 IOS 内支付有两种模式: 1) ...

  3. Myeclipse10使用git

    用Myeclipse安装egit,使用官网最新地址或者下载最新的egit插件到本地安装均在team中看不到git,最后发现到http://download.eclipse.org/egit/updat ...

  4. 【加解密专辑】对接触到的PGP、RSA、AES加解密算法整理

    先贴代码,有空再整理思路 PGP加密 using System; using System.IO; using Org.BouncyCastle.Bcpg; using Org.BouncyCastl ...

  5. Git学习之Git恢复进度

    ================================================ 继续暂存区未完成的实践 ======================================= ...

  6. 使用import取代require

    首先,Module 语法是 JavaScript 模块的标准写法,坚持使用这种写法.使用import取代require. // bad const moduleA = require('moduleA ...

  7. LinQ实战学习笔记(一) LINQ to (Objects, XML, SQL) 入门初步

    LINQ对于笔者来说, 优美而浓缩的代码让人震惊. 研究LINQ就是在艺术化自己的代码. 之前只是走马观花学会了基本的语法, 但是经常在CSDN看到令人惊讶自叹不如的LINQ代码, 还是让人羡慕嫉妒恨 ...

  8. Android开发进阶从小工到专家之性能优化

  9. php sqlserver及xdebug扩展配置

    ;extension=php_bz2.dllextension=php_curl.dll;extension=php_fileinfo.dll;extension=php_ftp.dll;extens ...

  10. wex5 onactive不执行的解决办法

    由index.w点击某个图片,转到adetail,希望每次adetail加载时,取到参数id index.w <tbody class="x-list-template" x ...