资源简介 (共14张PPT)5.3数据排序——冒泡排序冒泡排序冒泡排序是在一系列数据中对相邻两个数依次进行比较和调整,让较大的数“下沉(上冒)”,较小的数“上冒(下沉)”的一种排序技术。算法思想升序时:大则交换,使得从前向后比较时________下沉;降序时:小则交换,使得从前向后比较时________下沉。大数小数冒泡排序29363938443629393844363929384436393829443639384429②①③④初始值第1遍加工第1遍加工:i:_____,j:_________。比较_____次,交换___次。1[0,n-2]d[0]d[1]d[2]d[3]d[4]d[j]与d[j+1]比较4/n-14冒泡排序3936384429393836442939384436293639384429②①③初始值第2遍加工第2遍加工:i:_____,j:_________。比较____次,交换____次。2[0,n-3]d[0]d[1]d[2]d[3]d[4]d[j]与d[j+1]比较33冒泡排序393844362939443836293938443629②①初始值第3遍加工第3遍加工:i:_____,j:_________。比较____次,交换____次。3[0,n-4]d[0]d[1]d[2]d[3]d[4]d[j]与d[j+1]比较21冒泡排序4439383629①初始值第4遍加工第4遍加工:i:_____,j:_________。比较____次,交换____次。4[0,n-5]d[0]d[1]d[2]d[3]d[4]d[j]与d[j+1]比较113944383629冒泡排序d=[29,36,39,38,44]n=len(d)for i in range(_________):#加工遍数for j in range(________):#每遍加工范围if d[j]___________________#交换print(d)确定数据加工遍数确定每一遍加工的范围相邻比较,逆则交换1,n0,n-id[j],d[j+1]=d[j+1],d[j]冒泡排序小结初始值1遍加工:比较4次交换4次。2遍加工:比较3次交换3次。3遍加工:比较2次,交换1次。4遍加工:比较1次,交换1次。有比较不一定有交换。交换次数<=比较次数n个数据比较次数为 n个数据交换次数为 比较与交换29363938443639384429393844362939443836294439383629(n-1)+(n-2)+...+1=n*(n-1)/20——n*(n-1)/2冒泡变式d=[29,36,39,38,44]for i in range(_________):#加工遍数for j in range(________):#每遍加工范围if d[j]___________________#交换print(d)i表示遍数 j表示数组下标01230,n-10,n-i-1d[j],d[j+1]=d[j+1],d[j]i的范围:______________j的范围:______________0—n-20—n-i-22936393844[0,n-2][0,n-3][0,n-4][0,n-5]冒泡变式思考:若想要实现n个数据从后往前降序排序该如何改写上述代码?d=[29,36,39,38,44]n=len(d)for i in range(_________):#加工遍数for j in range(________):#每遍加工范围if d[j]___________________#交换print(d)i表示遍数 j表示数组下标1[0,n-2]2[0,n-3]3[0,n-4]4[0,n-5]1,nn-2,i-1,-1d[j],d[j+1]=d[j+1],d[j]i的范围:______________j的范围:______________[1,n-1][0,n-i-1]冒泡优化for i in range(1,len(d)):for j in range(0,len(d)-i):if d[j]>d[j+1]:d[j],d[j+1]=d[j+1],d[j]?应如何修改代码如何让计算机知道数据已经有序?当没有交换再发生时,数据有序(本遍加工交换次数为0)统计交换次数,做交换次数为0的判断冒泡优化for i in range(1,len(d)):c=0for j in range(0,len(d)-i):if d[j]>d[j+1]:__________d[j],d[j+1]=d[j+1],d[j]if c==0:__________更新每一遍中交换次数的存储变量用于统计每一遍中交换的次数判断数据是否已经有序c+=1break真题练习10.列表 s 包含 8 个互不相等的元素,即 s[0],s[1],s[2],……,s[7],有如下 Python 程序段:n=8for i in range(1,n-1): #加工遍数:___________for j in range(1,n-i-1): #第一遍加工j的取值范围:__________if s[j]>s[j-1]: #升序/降序:___________s[j],s[j-1]=s[j-1],s[j] #交换该程序段实现的是( )A.s[0]到s[5]的降序排列 B.s[1]到 s[6]的降序排列C.s[1]到s[7]的升序排列 D.s[2]到 s[6]的升序排列n-2[1,n-2)降序AEndThank you 展开更多...... 收起↑ 资源预览