选择排序(selection_sort)——Python实现
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实现的更多相关文章
- 选择排序之python
选择排序( Selection sort) 1.算法描述: 通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录进行交换. 对尚未完成排 ...
- 排序算法之选择排序的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)): ...
- 选择排序Selection_Sort
基本思想:和冒泡排序.直接插入排序并称为三大简单排序算法.显然,说明它们都很简单
- 选择排序的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)是一种简单直观的排序算法.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素, ...
- 《算法4》2.1 - 选择排序算法(Selection Sort), Python实现
选择排序算法(Selection Sort)是排序算法的一种初级算法.虽然比较简单,但是基础,理解了有助于后面学习更高深算法,勿以勿小而不为. 排序算法的语言描述: 给定一组物体,根据他们的某种可量化 ...
随机推荐
- 【C++】枚举类型(enum )
定义枚举类型的主要目的是:增加程序的可读性.枚举类型最常见也最有意义的用处之一就是用来描述状态量.枚举类型数据的其他处理也往往应用switch语句,以保证程序的合法性和可读性.枚举值是常量不是变量,不 ...
- FlinkSQL写入Kafka/ES/MySQL示例-JAVA
一.背景说明 Flink的API做了4层的封装,上两层TableAPI.SQL语法相对简单便于编写,面对小需求可以快速上手解决,本文参考官网及部分线上教程编写source端.sink端代码,分别读取s ...
- [Linux]经典面试题 - 网络基础 - TCP三次握手
[Linux]经典面试题 - 网络基础 - TCP三次握手 目录 [Linux]经典面试题 - 网络基础 - TCP三次握手 一.TCP报文格式 1.1 TCP报头 1.2 报文图例 二.TCP三次握 ...
- Java语言中的这些知识点有没有用过,工作中有没有入过这些坑?
在Java语言中,有一些相对生僻的知识,平时用的机会可能不是很多,但如果不了解不掌握这些知识点的话,也可能会掉入陷阱之中,今天我们就来初步梳理一下: 1. goto是java语言中的关键字. &quo ...
- Kafka 的这些原理你懂吗
如果只是为了开发 Kafka 应用程序,或者只是在生产环境使用 Kafka,那么了解 Kafka 的内部工作原理不是必须的.不过,了解 Kafka 的内部工作原理有助于理解 Kafka 的行为,也利用 ...
- asp.net core配合vue实现后端验证码逻辑
概述 网上的前端验证码逻辑总感觉不安全,验证码建议还是使用后端配合验证. 如果产品确定可以上网的话,就可以使用腾讯,百度等第三方验证,对接方便.但是产品可能内网部署,就必须自己写了. 本文章就是基于这 ...
- rabbitmqctl 命令整理
虽然还有http 接口.web admin组件可以进行管理,但是rabbitmqctl 基本包含了 rabbitmq 的全部管理功能,更为全面. 所以将其使用方法总结于此. 一,命令格式 rabbit ...
- Java安全之基于Tomcat实现内存马
Java安全之基于Tomcat实现内存马 0x00 前言 在近年来红队行动中,基本上除了非必要情况,一般会选择打入内存马,然后再去连接.而落地Jsp文件也任意被设备给检测到,从而得到攻击路径,删除we ...
- 【LeetCode每日一题 Day 5】5. 最长回文子串
大家好,我是编程熊,今天是LeetCode每日一题的第五天,一起学习LeetCode第五题<最长回文子串>. 题意 给你一个字符串 s,找到 s 中最长的回文子串. 示例 输入:s = & ...
- Docker 优雅终止方案
作为一名系统工程师,你可能经常需要重启容器,毕竟Kubernetes的优势就是快速弹性伸缩和故障恢复,遇到问题先重启容器再说,几秒钟即可恢复,实在不行再重启系统,这就是系统重启工程师的杀手锏.然而现实 ...