python冒泡排序法求告知哪里错了_(:з」∠)_

作者&投稿:逮娴 (若有异议请与网页底部的电邮联系)
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] view plain copy
def getrandata(num):
a=[]
i=0
while i<num:
a.append(random.randint(0,100))
i+=1
return a


shu=getrandata(10)

shu
Out[19]: [59, 2, 14, 65, 79, 68, 22, 74, 17, 0]


def bubble(a):
l=len(a)-2
i=0
while (i<l): #大循环l次
j=l
while (j>=i):
if (a[j]>a[j+1]):
a[j+1],a[j]=a[j],a[j+1]
j-=1
i+=1
return a


bubble(shu)
Out[22]: [0, 2, 14, 17, 22, 59, 65, 68, 74, 79]

冒泡排序算法的运作如下:

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内置的sort比自己写的快速排序快100倍?
因为python内置的sort是用c语言写的,如果你用c语言或者c++写的话肯定是可以做到一样快的至于为什么python计算效率比c语言能慢100倍这个具体的原理我不清楚,不过鉴于知乎上已经有很多大佬解释过这个问题,我就不在这里班门弄斧了 还有底下扯timsort的,快排序是所有比较排序算法里平均性能最优的一族算法,...

python append后排序(用循环)?
直接打开交互模式试一试:kevin@kevin-Rev-1-0:~$ python Python 2.7.18 (default, Mar 8 2021, 13:02:45)[GCC 9.3.0] on linux2 Type "help", "copyright", "credits" or "license" for more information.>>> print(40-13)27 >>> A = [91,95,97,99]>>> B = [92,93,96...

为什么说任何基于比较的算法将5个元素排序都需要7次
对于一个基于比较的排序算法,算法流程可以用一棵二叉树表示,每次比较运算作为一个节点(导致分岔),最终的叶节点就是排序结果,树的深度减去一就是最多需要的比较次数 5个元素有120种次序,作为二叉树的叶节点,二叉树至少有8层,所以至少要7步比较 ...

...写出任意一种你所知的排序算法(比如:冒泡排序, 归并排
include<stdio.h> include<stdlib.h> void BubbleSort(int a[], const int first, const int last);\/\/冒泡排序 void InsertSort(int a[], const int first, const int last);\/\/插入排序 void SelectSort(int a[], const int first, const int last);\/\/选择排序 void MergeSort(int a[]...

计算机二级c语言难不难
如果想学好C语言,首先要了解C语言的语法,比如字符串的格式,以及输入输出函数以及各个标点符号的含义,其次就是顺序语句,选择语句和循环语句,常见的就是for循环或者while循环和if判断。接下来,进入数组就开始增加难度了,此时还要接触一些算法,比如冒泡排序,选择排序,还有一些函数的调用,和实参形参区别...

算法面试通关40讲 覃超 Leetcode 题目总结(未完待续)
Ancestor of a Binary Search Tree 236 Lowest Common Ancestor of a Binary Tree 50 Pow(x, n) 169 Majority Element 122 Best Time to Buy and Sell Stock II 冒泡排序,选择排序,插入排序,供参考:【 C 】(未完待续,大概等我做完上面这些就可以继续补充剩下的了吧)

Python培训课程哪家好?
对于学python编程的途径可以说是有两种,一种是自学,一种是到培训机构进行报名学习,python是一门编程语言,是一门可以跟计算机打交道的语言,学习python编程语言需要做的是实操而不是大量的刷题;学习时间大概是4-6个月。培训学费视具体课程而定。市面上关于web前端培训费用,国内线下面授web前端培训...

python中有哪些简单的算法?
在Python中,Python算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。1、冒泡排序 冒泡排序也是一种简单直观的排序算法。重复地走访过要排序的数列,一次比较两个元素,如果顺序错误就交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经...

python算法有哪些
的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性);⑥高效性(High efficiency):执行速度快,占用资源少;⑦健壮性(Robustness):对数据响应正确。相关推荐:《Python基础教程》五种常见的Python算法:1、选择排序 2、快速排序 3、二分查找 4、广度优先搜索 5、贪婪算法 ...

Python原始问题求解
以下是一些常见的Python原始问题求解方法:排序算法:Python内置了多种排序算法,如冒泡排序、插入排序、选择排序、快速排序等。可以使用这些排序算法来解决不同类型的排序问题,例如计算器、词典等。文本处理:Python支持丰富的文本处理库,如Text、re、nltk等,可以用于实现各种文本处理任务,如文本分类、文本...

长春市18655271198: python冒泡排序法求告知哪里错了 - (:з」∠) --
喻贤明可: 冒泡排序算法的运作如下:1. 比较相邻的元素.如果第一个比第二个大,就交换他们两个.2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数.3. 针对所有的元素重复以上的步骤,除了...

长春市18655271198: 新人,自己用冒泡法写的20个数的大小排序程序,求错误在哪里? -
喻贤明可: scanf("%d",a[m]); 改为 scanf("%d",&a[m]);

长春市18655271198: 冒泡法排序 哪地方错了? -
喻贤明可: //---------------------------------------------------------------------------#include<stdio.h>void bubble(int a[],int n){int i,j,temp;for(i=n-1;i>0;i--){for(j=n-1;j>n-1-i;j--){if(a[j-1]>a[j]){temp=a[j-1];a[j-1]=a[j];a[j]=temp;}}}}main(){int i,a[]={1,2,5,4,3};bubble(a,5);for (i = 0; i<5; i++)...

长春市18655271198: 冒泡排序法,哪错了? -
喻贤明可: change这个标志位不用设置,你的代码的for循环的继续的条件是:i<=n-1&&change而你的代码里面,只有交换值处理之后,change才被置为TRUE,所一旦出现一次,r[j].key<=r[j+1].key的情况,就会导致循环不再继续

长春市18655271198: 冒泡法对四个数排序,哪里错了》?我输1 2 3 4,结果是4 4 4 4 -
喻贤明可: for(i=0;i<=3;i++) { for(j=i+1;j<=4;j++) if(a[i]<a[j]) { t=a[j]; a[i]=a[j]; a[j]=t; }

长春市18655271198: 字符串排序(冒泡法),无法运行成功,哪里错了?怎么改?(请用指针法,不要用数组) -
喻贤明可: 算法没有问题,但是只用char *s="bssfjlsdjlj";定义字符串的话,此指针指向的字符串内存地址会默认为const类型,这样就没有办法进行数值修改了,象下面这样多加一个char型数组,然后让s指针指向它,就不会是const类型的了.这样就可...

长春市18655271198: 请高手看看我写的冒泡排序哪里出错 -
喻贤明可: void BubbleSort(int a[],int n) { int i, j, temp; if(n > 1) { for(j = 0; j <= n - 2; j++) {for(i = n - 1; i > j; i--) { if(a[i - 1] > a[i]) { temp = a[i]; a[i] = a[i-1]; a[i-1] = temp; } } }} return; } 在你的程序基础上稍微改动一点, 注意看第二层for循环部分.

长春市18655271198: 输入10个整数,按由小到大排序(用冒泡法).错在哪里? -
喻贤明可: 数组边界溢出; if(a[j]>a[j+1]){ }这里j可以等于9,(j+1)就是10. 我想你会明白的

长春市18655271198: 各位大虾.以下冒泡排序算法哪里错了?我实在找不出来.先谢过各位了. -
喻贤明可: if(a[j]>a[j+1]) s=a[j];a[j]=a[j+1];a[j+1]=s;这里没用{}括起来 这里是三条语句哦如果用分号的话就要用{}括起来if(a[j]>a[j+1]){ s=a[j];a[j]=a[j+1];a[j+1]=s;}或者使用逗号 改变为一条语句if(a[j]>a[j+1]) s=a[j],a[j]=a[j+1],a[j+1]=s;这两种方法都是可以的 我已在VC6下测试通过

长春市18655271198: 高手看看,为什么冒泡排序排不起,错哪儿了 -
喻贤明可: #include main () { int arr[10]; int i,j,temp,n; printf("How many array:"); scanf("%d",&n); for (i=0;i{ printf("input arr[%d]:",i); /* 说这句少了一个')',我看看没少呀 */ scanf("%d",&arr[i]); } printf("\n"); /* 冒泡排序 */ for(i=0;ifor(j=i;jif (arr[j]>...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网