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

运行结果:

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

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

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

 1 [-39, 56, 92, 12, 5, 110, 92, 999, -1, 21, 76, 33, 56]
2 [-39, -1, 92, 56, 12, 110, 92, 999, 5, 21, 76, 33, 56]
3 [-39, -1, 5, 92, 56, 110, 92, 999, 12, 21, 76, 33, 56]
4 [-39, -1, 5, 12, 92, 110, 92, 999, 56, 21, 76, 33, 56]
5 [-39, -1, 5, 12, 21, 110, 92, 999, 92, 56, 76, 33, 56]
6 [-39, -1, 5, 12, 21, 33, 110, 999, 92, 92, 76, 56, 56]
7 [-39, -1, 5, 12, 21, 33, 56, 999, 110, 92, 92, 76, 56]
8 [-39, -1, 5, 12, 21, 33, 56, 56, 999, 110, 92, 92, 76]
9 [-39, -1, 5, 12, 21, 33, 56, 56, 76, 999, 110, 92, 92]
10 [-39, -1, 5, 12, 21, 33, 56, 56, 76, 92, 999, 110, 92]
11 [-39, -1, 5, 12, 21, 33, 56, 56, 76, 92, 92, 999, 110]
12 [-39, -1, 5, 12, 21, 33, 56, 56, 76, 92, 92, 110, 999]
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. Linux中查看网络命令

    tcp三次握手,所以一直在listening,在等待信号 udp是没有listening状态的,因为不管你在不在都会发信息给你. netstat -r  =route -n  可以查看路由

  2. php 安装 yii 报错: phpunit/phpunit 4.8.32 requires ext-dom *

    php 安装 yii 报错: phpunit/phpunit 4.8.32 requires ext-dom * 我的版本是7.0,以7.0为例演示. 先装这两个拓展试试: sudo apt-get ...

  3. QTreeView 使用 QStandardItemModel

    QTreeView 使用 QStandardItemModel @ 目录 QTreeView 使用 QStandardItemModel 前言 一.直接上图 二.添加同级结点项 1.思路 2.实现 二 ...

  4. 七、JavaSE语言基础之方法

    关于方法的几个简单概念 关于方法的学习,先来明确几个简单的概念: 方法的作用:处理数据(把原始数据通过指定的算法处理后得到结果数据) 方法:在类中定义的具有特定功能的代码块 方法的意义(作用):提高代 ...

  5. HTTP 5XX代码理解

      500: 内部服务器错误,服务程序出现错误 501: 请求为完成,服务器不支持所请求功能,很少遇到 502: Bad Gateway,服务器从上游服务器收到一个无效响应, 一般就是nginx后端服 ...

  6. layui 监听checkbox 、radio、switch选中改变事件

    form.on('checkbox(filter)', function(data){ console.log(data.elem); //得到checkbox原始DOM对象 console.log( ...

  7. 如何管理MongoDB的用户和权限

    管理用户的创建及使用 创建用户的函数是db.createUser({...}),创建用户时通常需要为该用户添加权限,如read.readWrite权限. 可添加的权限以及说明: 权限 作用 read ...

  8. SpringCloud:扩展zuul配置路由访问

    继续上次整合SpringCloud的demo进行扩展zuul:https://www.cnblogs.com/nhdlb/p/12555968.html  这里我把zuul划分出一个模块单独启动 创建 ...

  9. mysql 去重的两种方式

    1.distinct一般用于获取不重复字段的条数 使用原则: 1)distinct必须放在要查询字段的开头,不能放在查询字段的中间或者后面 select distinct name from user ...

  10. Mysql索引降维 优化查询 提高效率

    在前一篇文章中,我们已经介绍了索引.索引的优化规则等等 原文链接:Siam博客 mysql索引优化 在其中我们有引申出组合索引,多个单字段索引冲突两个知识点. 本文章主要是与后者有关联. 在原文中,我 ...