冒泡排序和选择排序(bubble sort and selection sort)
Bubble sort
Basic Method:
import random
nums = [random.randint(1,20) for _ in range(10)] #制作一个无序数字列表
print(nums)
length = len(nums)
for i in range(length - 1):
for j in range(length - 1 - i):
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
print(nums)
Method Optimization:
import random
nums = [random.randint(1,20) for _ in range(10)] #制作一个无序数字列表
print(nums)
length = len(nums)
flag = True
for i in range(length - 1):
flag = False
for j in range(length - 1 - i):
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
flag = True
if not flag:
break
print(nums)
Selection sort
Basic Method
import random
nums = [random.randint(1, 20) for _ in range(10)] #制作一个无序数字列表
print(nums)
length = len(nums)
for i in range(length - 1):
minindex = i
for j in range(i+1, length):
if nums[j] < nums[minindex]:
minindex = j
else:
if minindex != i:
nums[i], nums[minindex] = nums[minindex], nums[i]
print(nums)
Method Optimization 1
import random
nums = [random.randint(1, 20) for _ in range(10)] #制作一个无序数字列表
print(nums)
length = len(nums)
for i in range(length // 2):
minindex = i
maxindex = ~i
for j in range(i+1, length-i):
if nums[j] < nums[minindex]:
minindex = j
if nums[~j] > nums[maxindex]:
maxindex = ~j
if nums[maxindex] == nums[minindex]:
break
if minindex != i:
nums[i], nums[minindex] = nums[minindex], nums[i]
if maxindex == i - length:
maxindex = minindex - length
if maxindex != ~i:
nums[maxindex], nums[~i] = nums[~i], nums[maxindex]
print(nums)
Method Optimization 2
import random
nums = [random.randint(1, 20) for _ in range(10)] #制作一个无序数字列表
print(nums)
length = len(nums)
for i in range(length // 2):
minindex = i
maxindex = i
for j in range(i+1, length-i):
if nums[j] < nums[minindex]:
minindex = j
elif nums[j] > nums[maxindex]:
maxindex = j
if nums[maxindex] == nums[minindex]:
break
if minindex != i:
nums[i], nums[minindex] = nums[minindex], nums[i]
if maxindex == i:
maxindex = minindex
if maxindex != ~i:
nums[maxindex], nums[~i] = nums[~i], nums[maxindex]
print(nums)
冒泡排序和选择排序(bubble sort and selection sort)的更多相关文章
- 选择排序的php实现 Selection Sort
选择排序Selection Sort的PHP实现,安全按照算法所写. 同一排序算法下,需要趟数最多的数列是什么数列呢?思考中. 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序 ...
- JavaScript算法(冒泡排序、选择排序与插入排序)
冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...
- 冒泡排序和选择排序(Go语言实现)
冒泡排序和选择排序是排序算法中比较简单和容易实现的算法.冒泡排序的思想为:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端.而选择排序的思想也很直观:每一次排序 ...
- Java数据结构和算法总结-冒泡排序、选择排序、插入排序算法分析
前言:排序在算法中的地位自然不必多说,在许多工作中都用到了排序,就像学生成绩统计名次.商城商品销量排名.新闻的搜索热度排名等等.也正因为排序的应用范围如此之广,引起了许多人深入研究它的兴趣,直至今天, ...
- Java 快速排序法 冒泡排序法 选择排序法 插入排序法
1.快速排序的原理: 选择一个关键值作为基准值.比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的). 从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果 ...
- js中常见的数组排序算法-冒泡排序和选择排序
reverse( ) 数组逆序 // reverse() 数组逆序 var arr = ["边境牧羊犬", "德国牧羊犬", "金毛" ...
- php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法
这里我们介绍一些常用的排序方法,排序是一个程序员的基本功,所谓排序就是对一组数据,按照某个顺序排列的过程. 充效率看 冒泡排序法<选择排序法<插入排序法 排序分两大类: 内部排序法 交换式 ...
- 插入排序、冒泡排序、选择排序、希尔排序、高速排序、归并排序、堆排序和LST基数排序——C++实现
首先是算法实现文件Sort.h.代码例如以下: <pre name="code" class="java">/* * 实现了八个经常使用的排序算法: ...
- 【排序算法】——冒泡排序、选择排序、插入排序、Shell排序等排序原理及Java实现
排序 1.定义: 所谓排序,即是整理文件中的内容,使其按照关键字递增或递减的顺序进行排列. 输入:n个记录,n1,n2--,其对应1的关键字为k1,k2-- 输出:n(i1),n(i2)--,使得k( ...
随机推荐
- [Python3 练习] 011 利用异常解题
目录 函数式编程 Functional Programming 1. 简介 2. 函数 3. 匿名函数 3.1 lambda 表达式也称"匿名函数" 3.2 lambda 表达式的 ...
- 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)
layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...
- # 江西CCPC省赛-Rng(概率+逆元)
江西CCPC省赛-Rng(概率+逆元) 题意: 给出一个n,在[1,n]之间选一个R1,在[1,R1]之间选一个L1,得到区间[L1,R1],同理获取区间[L2,R2],问两个区间相交的概率对1e9+ ...
- oppo 手机不能连接appium,提示does not have permission android.permission.CLEAR_APP_USER_DATA to clear data
1)增加配置项noReset=true 2)除了常见开发者选项中打开usb调试,同时还需要开启以下2项,然后重启手机即可
- 05 Django之模型层---单表操作
一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...
- DockerScan:Docker安全分析&测试工具
DockerScan:Docker安全分析&测试工具 今天给大家介绍的是一款名叫DockerScan的工具,我们可以用它来对Docker进行安全分析或者安全测试. 项目主页 http://gi ...
- Ubuntu中出现“Could not get lock /var/lib/dpkg/lock”的解决方法
在运行Ubuntu安装软件,使用命令sudo apt-get install时,有时会出现以下的错误: E: Could not get lock /var/lib/dpkg/lock - open ...
- Centos7 初始化
systemctl disable firewalld sed -ri '/^[^#]*SELINUX=/s#=.+$#=disabled#' /etc/selinux/config grubby - ...
- Python基础编程:字符编码、数据类型、列表
目录: python简介 字符编码介绍 数据类型 一.Python简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心 ...
- 00-B-springmvc分布式项目项目结构
两个和具体业务关联不紧的模块,单独记录.有的项目可能不需要这两个模块 05模块:p2p-pay 该模块专门用来统一各种支付实现,比如Alipay.微信支付等 com.bjpowernode.pay顶级 ...