# 选择排序
# 作用:对给出的n个顺序不定的数进行排序
# 输入:任意数组A
# 输出:按顺序排列的数组A
# 时间复杂度 (n(n-1))/2
# 选择排序
# 第一趟:选择第一个元素,依次与每个元素比较,用k记录下最小的元素的位置,
#           然后第一个元素与最小的元素交换,此时第一个元素变为最小
# 第二趟:选择第二个元素,依次与除了第一个之外的每个元素比较,用k记录下最小的元素的位置,
#           然后第二个元素与最小的元素交换,此时第二个元素变为除第一个之外的最小
# 以此类推,进行n趟后,得到结果
 
  1. 1 # 在此修改初始数据
  2. 2 A = [12,56,92,-1,5,110,92,999,-39,21,76,33,56]
  3. 3 print('初始数据为:');print(A)
  4. 4
  5. 5 n = len(A) # 用n获取数组长度
  6. 6 i = 0 # 外循环数组元素下标
  7. 7 k = 0 # 内循环的次数,即数组进行k次内循环后前k个数被确定
  8. 8 j = 0 # 内循环数组元素下标
  9. 9
  10. 10 while i <= n-1: # 循环n次
  11. 11 while j <= n-1:
  12. 12 if A[i] > A[j]: # 若大于,则交换,若小于,继续比较下一个
  13. 13 temp = A[i]
  14. 14 A[i] = A[j]
  15. 15 A[j] = temp
  16. 16 j = j+1
  17. 17 else:
  18. 18 j = j+1
  19. 19 k = k+1 # 完成一次内循环,则确定一个数
  20. 20 i = i+1 # 选择下个元素进行内循环
  21. 21 j = k # 每次循环后将j的值设为k,则下一次循环就不用比较之前已确定的数
  22. 22 print(A) # 查看程序执行过程
  23. 23
  24. 24 print('调整后的数据为:')
  25. 25 print(A)

运行结果:

  1. 初始数据为:
  2. [12, 56, 92, -1, 5, 110, 92, 999, -39, 21, 76, 33, 56]
  3. 调整后的数据为:
  4. [-39, -1, 5, 12, 21, 33, 56, 56, 76, 92, 92, 110, 999]

选择排序运行过程中数组A的变化情况:

加粗的数表示每一趟确定下来的数,为数组元素的最小值(除了已确定的数)

  1. 1 [-39, 56, 92, 12, 5, 110, 92, 999, -1, 21, 76, 33, 56]
  2. 2 [-39, -1, 92, 56, 12, 110, 92, 999, 5, 21, 76, 33, 56]
  3. 3 [-39, -1, 5, 92, 56, 110, 92, 999, 12, 21, 76, 33, 56]
  4. 4 [-39, -1, 5, 12, 92, 110, 92, 999, 56, 21, 76, 33, 56]
  5. 5 [-39, -1, 5, 12, 21, 110, 92, 999, 92, 56, 76, 33, 56]
  6. 6 [-39, -1, 5, 12, 21, 33, 110, 999, 92, 92, 76, 56, 56]
  7. 7 [-39, -1, 5, 12, 21, 33, 56, 999, 110, 92, 92, 76, 56]
  8. 8 [-39, -1, 5, 12, 21, 33, 56, 56, 999, 110, 92, 92, 76]
  9. 9 [-39, -1, 5, 12, 21, 33, 56, 56, 76, 999, 110, 92, 92]
  10. 10 [-39, -1, 5, 12, 21, 33, 56, 56, 76, 92, 999, 110, 92]
  11. 11 [-39, -1, 5, 12, 21, 33, 56, 56, 76, 92, 92, 999, 110]
  12. 12 [-39, -1, 5, 12, 21, 33, 56, 56, 76, 92, 92, 110, 999]
  13. 13 [-39, -1, 5, 12, 21, 33, 56, 56, 76, 92, 92, 110, 999]

简而言之,选择排序过程每次确定一个数,从运行过程上看,很像冒泡排序。

选择排序和冒泡排序的区别是:冒泡排序侧重于“冒泡”,每趟外循环通过冒泡(不断地交换)确定一个数;而选择排序侧重于“选择”,通过比较将指针指向最小的数,然后再做交换。

选择排序(selection_sort)——Python实现的更多相关文章

  1. 选择排序之python

    选择排序( Selection sort) 1.算法描述: 通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录进行交换. 对尚未完成排 ...

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

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

  3. 选择排序(Python实现)

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

  4. 选择排序之python实现

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

  5. 选择排序Selection_Sort

    基本思想:和冒泡排序.直接插入排序并称为三大简单排序算法.显然,说明它们都很简单

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

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

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

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

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

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

  9. 《算法4》2.1 - 选择排序算法(Selection Sort), Python实现

    选择排序算法(Selection Sort)是排序算法的一种初级算法.虽然比较简单,但是基础,理解了有助于后面学习更高深算法,勿以勿小而不为. 排序算法的语言描述: 给定一组物体,根据他们的某种可量化 ...

随机推荐

  1. ES6学习笔记之函数(二)

    5.作用域 使用默认参数时,参数会形成一个独立的作用域,此作用域与函数体中的作用域是平行关系,互不影响. var x = 1; function show(x, y= function () { x= ...

  2. js(if else)分数等级查询

    <!DOCTYPE html><html><head><meta charset="utf-8"><title>文档标题 ...

  3. Unity3D-UI--Layout组件

    Layout组件 自动排版 Layout Group Vertical Layout Group 垂直布局 [垂直布局组]组件将其子布局元素彼此重叠.它们的高度由各自的最小高度,首选高度和柔性高度决定 ...

  4. 103、kickstart自动化安装操作系统

    103.1.前言: 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装. 常规的办法有: 光盘安装系统===>一个 ...

  5. Linux云计算-03_必备基础命令

    Linux系统启动默认为字符界面,一般不会启动图形界面,所以对命令行的熟练程度能更加方便.高效的管理Linux系统. 本章介绍Linux系统必备命令各项参数及功能场景,Linux常见命令包括:cd.l ...

  6. 界面设计ie8 笔记

    1.ie8 jsp中设置 margin:0 auto 无效 解决方法  在html 标签改为<!DOCTYPE html> 2.ie8 input file 无法通过js触发点击事件,网上 ...

  7. POJ 2663 Tri Tiling dp 画图找规律

    状态:d[i]代表n=i时的方案数. 状态转移方程:d[i]=d[i-2]+2*(d[i-2]+d[i-4]+-+d[0]) i只会为偶数,奇数情况不存在,d[0]=1 找状态转移方程的时候画图更好理 ...

  8. 在idea的控制台中中文显示为乱码

    显示乱码的原因不一定相同 我目前解决方法: -Dfile.encoding=UTF-8

  9. FastTunnel-开源内网穿透框架

    FastTunnel - 打造人人都能搭建的内网穿透工具 FastTunnel是用.net core开发的一款跨平台内网穿透工具,它可以实现将内网服务暴露到公网供自己或任何人访问. 与其他穿透工具不同 ...

  10. npm run start失败&Node.js 查询指定端口运行情况及终止占用端口办法

    缘由: node.js项目中运行npm run start命令脚本报错,No such file or directory 最开始以为是命令脚本找不到所谓的执行路径,但后面发现不是,是package. ...