python冒泡排序函数_python冒泡排序-Python,冒泡排序
arr
=
[
7
,
4
,
3
,
67
,
34
,
1
,
8
]
.
def
bubble_sort
:
最近在学习Python,下面是我的一些笔记
冒泡排序
实现思路: 使用双重for循环,内层变量为i, 外层为j,在内层循环中不断的比较相邻的两个值(i, i+1)的大小,如果i+1的值大于i的值,交换两者位置,每循环一次,外层的j增加1,等到j等于n-1的时候,结束循环
第一次看不懂很正常,不要灰心,下面是使用代码的实现
arr =[7,4,3,67,34,1,8]defbubble_sort(arr):
n =len(arr)for j inrange(0, n -1):for i inrange(0, n -1- j):if arr[i]> arr[i +1]:
arr[i], arr[i +1]= arr[i +1], arr[i]
bubble_sort(arr)print(arr)# [1, 3, 4, 7, 8, 34, 67]
关键点其实在双重for循环变量的配置,我们来分析一下
第一次循环: j = 0, i~n-2 range(0, n-1)
第二次循环: j = 1, i~n-3 range(0, n-1-1)
第三次循环: j = 2, i~n-4 range(0, n-1-1-1)
—> range(0, n-1-j)
理解这一点后,我们就可以换一种写法来实现了
defbubble_sort2(arr):for j inrange(len(arr)-1,0,-1):# [n-1, n-2, ....2, 1]for i inrange(0, j):if arr[i]> arr[i +1]:
arr[i], arr[i +1]= arr[i +1], arr[i]
bubble_sort2(arr)print(arr)# [1, 3, 4, 7, 8, 34, 67]
优化
写到这里我们发现,无论是第一种写法还是第二种写法,他的时间复杂度都是O(n ^ 2), 第二种写法也仅仅停留在优化样式的层面,并没有带来性能的提升,想象一下,如果我们输入的本来就是一个有序序列,其实只需要一次循环就够了,所以我们需要针对特殊情况进行优化
defbubble_sort3(arr):for j inrange(len(arr)-1,0,-1):
count =0for i inrange(0, j):if arr[i]> arr[i +1]:
arr[i], arr[i +1]= arr[i +1], arr[i]
count +=1if count ==0:return
bubble_sort3(arr)print(arr)# [1, 3, 4, 7, 8, 34, 67]
我们在循环中定义了一个变量count,如果第一次循环后count没有变化,就说明输入的是有序序列,这时我们直接return退出循环,这时候的时间复杂度为O(n)
扩展知识:冒泡排序还是一种稳定性的算法,如果序列中出现两个相同的值的时候,无论选取最大值,还是最小值进行排序,最后两个相同值的前后位置都是不变的。
python中怎样实现冒泡排序
array = [1,18,3,7,2,4]
for i in range(len(array))[::1]:
for j in range(i):
if array[j] > array[j + 1]:
array[j], array[j + 1] = array[j + 1], array[j]
print array
必须再倒过来排一下,加个 [::1] 这个代码才对
python冒泡排序方法
#-*-coding:utf-8-*-
#g:/python
#冒泡排序
#1.定义一个列表
number=[6665,666,323,124,4442,5,123,412,55]
#外循环控制冒泡排序的次数,n个数为n-1次
for i in range(0,len(number)-1):
#内循环控制每次排序对比的次数,n个数对比n-1次
for j in range(0,len(number)-1):
#进行对比,交换位置
if(number[j]>number[j+1]):
index=number[j+1]
number[j+1]=number[j]
number[j]=index
#输出排序后的列表
print(number)
用Python实现从输入若干个整数,直接输入回车表示结...
用Python实现从输入若干个整数,直接输入回车表示结束,用冒泡法进行排序...
用Python实现从输入若干个整数,直接输入回车表示结束,用冒泡法进行排序
python 解决冒泡排序法 实在看不懂呀 谁能一行一行...
这个看起来简单,却并不好解释。
首先你要明白xrange是什么,知道了xrange的用法,自然后不会再问”-1 -1 -1“这样的问题了,
xrange返回的是一个生成器对象,其结果可以勉强理解为一个列表(range()返回的就是一个列表,但是两者绝不相同,xrange()只有对其遍历的时候才会生成具体的结果。)
xrange()的具体用法请自己百度!
以上例来说:
for j in xrange(len(numbers)-1,-1,-1):
j的遍历结果为4,3,2,1,0
for i in xrange(j):
当j=4时,i的遍历结果为0,1,2,3
...
然后只要你明白冒泡排序的原理,就能知道,
当j=4时通过i的遍历对numbers的两两相邻元素对比交换把最小的数字放到最前面
当j=3时......把第二小的元素放到第二的位置...
...
祝你成功!
python冒泡排序法求告知哪里错了_(:з」∠)_
恩...Python小新人刚学到冒泡排序那里..回家试了一下不知道为什么就是不对求告知哪里错了,还有最后的None请问是啥..怎么去掉谢谢!!...
恩...Python小新人刚学到冒泡排序那里..
回家试了一下不知道为什么就是不对 求告知哪里错了,还有最后的None请问是啥..怎么去掉
谢谢!!
冒泡排序算法的运作如下:
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
所以可以看出,你代码仅仅比较了一次相邻的两个,而没有继续往后比较,输出的第三行开始出现问题。至于那个None,因为你定义函数没有返回值的原因。
我给你三个函数,你对比一下:
def list_sort_new(list_in):
for j in range(len(list_in)-1, 0 ,-1):
for i in range(0, j):
if list_in[i]>list_in[i+1]:
list_in[i],list_in[i+1] = list_in[i+1],list_in[i]
return list_in
def list_sort_old(list_in):
for j in range(len(list_in)-1, 0 ,-1):
for i in range(0, j):
if list_in[i]>list_in[i+1]:
list_temp = list_in[i]
list_in[i] = list_in[i+1]
list_in[i+1] = list_temp
return list_in
def list_sort_test(list_in):
for j in range(len(list_in)-1, 0 ,-1):
for i in range(0, j):
if list_in[i]>list_in[i+1]:
print "before>> " + str(list_in[i])
list_in[i] = list_in[i+1]
print "after>> " + str(list_in[i])
list_in[i+1] = list_in[i]
print "and> " + str(list_in[i+1])
return list_in
list_test = [2, 1, 3, 44, 22, 53, 25, 26]
print list_test
print "*"*20
print(list_sort_test(list_test))
其中函数list_sort_new()和list_sort_old()都能实现你的目的,其中list_sort_new()中使用了指派运算, 就相当于c语言的i++。 list_sort_old()类似于你的想法,其中j的for实现了全部比较,而倒序减少了不必要的比较,list_sort_test()告诉了你,为什么需要一个变量来充当缓存。
住好运。。。。
python冒泡排序的测试函数,给个例子,谢谢
def bubbleSort(myList):
# 首先获取list的总长度,为之后的循环比较作准备
length = len(myList)
# 一共进行几轮列表比较,一共是(length-1)轮
for i in range(0, length - 1):
# 每一轮的比较,注意range的变化,这里需要进行length-1-长的比较,注意-i的意义(可以减少比较已经排好序的元素)
for j in range(0, length - 1 - i):
# 交换
if myList[j] > myList[j + 1]:
tmp = myList[j]
myList[j] = myList[j + 1]
myList[j + 1] = tmp
# 打印每一轮交换后的列表
for item in myList:
print(item)
print("=============================")
print("Bubble Sort: ")
myList = [2,0,1,8,0,3,0,2]
bubbleSort(myList)
python冒泡排序运行顺序
(不知道有没有人知道我想表达的问题,我说不清楚,解决了问题我采纳回答)想知道图中代码运行顺序。是1里面的代码循环直到把fish_records里最大的数排在最后一位然后再运行2吗?也就...
(不知道有没有人知道我想表达的问题,我说不清楚,解决了问题我采纳回答) 想知道图中代码运行顺序。是1里面的代码循环直到把fish_records里最大的数排在最后一位然后再运行2吗?也就是[8,7,2,3,6,1,1,18]。。。为什么1里不是[8,18,7,2,3,6,1,1]再运行2 ?
展开
用python写一个冒泡排序,让用户输入一组整型数字...
同上...
同上
参考代码如下:
#include
int main()
{
int a[10];//用来存数据
int i,j,temp;
for(i = 0; i < 10; i ++)//输入10个数。
scanf("%d",&a[i]);
for (j = 0; j < 9; j++)//标准冒泡法排序
for (i = 0; i < 9- j; i++)
{
if(a[i] > a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
for(i = 0; i < 10; i ++)//输出。
printf("%d,",&a[i]);
printf("\n");
return 0;
}
python 冒泡排序怎么写不让最大的两个值相等
冒泡排序的时间复杂度是O(N^2)
冒泡排序的思想: 每次比较两个相邻的元素, 如果他们的顺序错误就把他们交换位置
比如有五个数: 12, 35, 99, 18, 76, 从大到小排序, 对相邻的两位进行比较
python冒泡排序函数_python冒泡排序-Python,冒泡排序相关推荐
- python complex函数_python十二星座python函数每日一讲 - complex()
complex([real[, imag]]) 中文说明: 创建一个值为real + imag * j的复数或者转化一个字符串或数为复数.如果第一个参数为字符串,则不需要指定第二个参数. 参数real ...
- python匿名函数_Python匿名函数
python匿名函数 Welcome to Python anonymous function tutorial. In the previous tutorial we learned about ...
- python json安装_Python JSON - Python 基础教程 - 自强学堂
Python JSON 本章节我们将为大家介绍如何使用 Python 语言来编码和解码 JSON 对象. Python 2.7 自带 JSON 模块[官方文档] 1. 从python原始类型向json ...
- python not函数_python 函数
1 为什么使用函数 在没有接触函数时,有时候需要将一个功能多次写,如果需要修改其中一个变量,则需要把所有实现该功能的代码一处一处改.不利于代码维护,代码量大了,组织结构也会很不清晰. 所以总结不使用函 ...
- python include函数_python 库函数
python的内建函数和库函数的区别是什么? [区别]:标准库函数都需要import xxx才能取得.内建函数都在__builtins__里面,在global里直接就能用. [补充]:1.python ...
- python dump函数_python 处理 json 四个函数dumps、loads、dump、load的区别
1 .json.dumps() 函数是将一个 Python 数据类型列表(可以理解为字典)进行json格式的编码(转换成字符串,用于传播) eg, dict = {"age": & ...
- python日期函数_python 时间及日期函数
本人最近新学python ,用到关于时间和日期的函数,经过一番研究,从网上查找资料,经过测试,总结了一下相关的方法. import time import datetime '''时间转化为时间戳: ...
- python remove函数_python中remove函数的用法是什么?
python中remove函数的用法是什么? python中remove函数的用法: 描述 remove() 函数用于移除列表中某个值的第一个匹配项. 语法 remove()方法语法: list.re ...
- python islower函数_python字符串是否是小写-python 字符串小写-python islower函数-python islower函数未定义-嗨客网...
Python字符串是否是小写教程 在开发过程中,有时候我们需要判断一个 Python islower()函数详解 语法 str.islower() -> bool 参数 参数 描述 str 表示 ...
最新文章
- ajax html xml数据格式,AJAX | 数据格式JSON与XML的区别
- cudnn问题 cudnnCreate 延时长 见效慢 要卡十几分钟才能过 如何解决?(229)
- BZOJ1798: [Ahoi2009]Seq 维护序列seq
- 考驾照重点科目的关键考试技巧
- 百度相关搜索软件_不太热门的办公神器软件篇搜索相关
- 服务器预装操作系统,服务器预装操作系统吧
- 关于CleanMyMac常见问题与解答
- 探索性测试 之 极速测试
- 前端开发学习要装哪些电脑软件
- goahead源码分析webs.c
- 传统大华海康宇视安防摄像头RTSP流如何转webrtc直播低延时无插件浏览器视频播放
- 51单片机ADC模数转换
- php 字符串放到数组中,在PHP中将字符串转换为数组(Converting string into array in php)...
- 线阵CCD相机与面阵相机的区别
- HarmonyOS应用开发实战 | 开发运动手表小游戏
- SICP ex 1-27
- 数字经济背景下的多元化转型,电信运营商如何突围?
- c语言main方法返回至爱,extern C的用法解析
- Unity3d项目入门之Rolling Ball
- 【手把手教你用Matlab做双目摄像头标定】Ubuntu环境
热门文章
- Google App Engine:在您自己的域中托管应用程序
- python操纵excel的方法_python操作Excel的几种方式
- ftp限流java,FTP流量限制的方法
- php 时间加法函数_php 时间加减
- java命令模式返回值_JAVA 设计模式 命令模式
- 3制造数据集_基于MBD的产品设计制造技术研究
- 浮点数计算机的表示案例,计算机中的数据及其应用案例.docx
- axture动画原型制作_Axure制作原型-基础操作
- 计算机专业英语主要句型及翻译技巧,计算机专业英语单词及翻译等技巧-20210420072747.ppt-原创力文档...
- Sublime Text提示Unable to download XXX. Please view the console for more details安装插件失败解决