目的:为输入的十个数排序

第一种:

 选择排序法:

>>>原理:先设第一个数为最小数A,然后遍历剩余的数,剩余的数中再选出一个最小的数B,A与B比较大小后,若A依旧小,则A与B的位置不交换;否则交换位置,以此完成第一轮筛选,接着不管已排好的第一位数,以第二位作为新的一轮的最小值,再从接下来的数中选出最小数,两个最小数又作比较,进行位置交不交换的选择……

>>>时间复杂度(循环体需要执行的总次数):O(n*n)

 

>>>(python)代码实现1:

l=[]
for i in range(10):
   a=int(input("please input the numbers:"))
   l.append(a)
print(l)
for i in range(9):
   minIndex=i
   for j in range(i+1,10):
      if l[minIndex]>l[j]:
         minIndex=j
   l[i],l[minIndex]=l[minIndex],l[i]
print(l)

>>>运行结果:

please input the numbers:90
please input the numbers:88
please input the numbers:98
please input the numbers:78
please input the numbers:7
please input the numbers:56
please input the numbers:77
please input the numbers:34
please input the numbers:12
please input the numbers:55
[90, 88, 98, 78, 7, 56, 77, 34, 12, 55]
[7, 12, 34, 55, 56, 77, 78, 88, 90, 98]

Process finished with exit code 0

>>>(C语言)代码实现2:

>>>我遇到的问题:python中交换两个值的语句属于哪个循环不清楚;

C语言中,我实在找不出错在哪,感觉程序代码是对的,可是运行结果适合输入顺序相反,所以我只好把过程先附上。

添加(C语言改错):(自己第二天写了一遍,这次能运行出来)

出错之处:用min=a[i],循环次数也有出界。

第二种:

冒泡排序法:

>>>原理:从第一个数开始,把第一个数和第二个数作比较,谁大就谁排在后面,再用第三个数和刚刚更新得到的第二个数比较大小,重复之前的 大数后排 的操作,直到第一轮结束,末尾就会得到一个输入十个数中的最大一个值(或者多个重复值)。这时又开始第二轮排序,依旧执行前后两个值比较,大数后排的操作…...

>>>时间复杂度(循环体需要执行的总次数):O(n*n)

>>>(python)代码实现1:

>>>(C语言)代码实现2:

>>>我遇到的问题:python中 循环时容易出界,即j<10会造成循环体里面l[j]>l[j+1]出现错误;

C语言中,我再次失败了。不过,我还是把半成品附上吧。

添加(C语言改错):(又重新自己写了一遍,发现与上次写的几乎一样,令人高兴的是,这次能运行出来。不知道是为什么?)

第三种:

插入排序法:

>>>原理:以输入的第二个数作为代插入的数,然后把它和它前一个数作比较,若满足第二个数小于第一个数,则调换两个数的位置;否则,不调换。又进行下一轮比较,第三个数为待插入的数,第三个数与之前得到的新排序的第二数作比较,判断是否调换位置,若调换,则新得到的第二个数又与第一个数比较,判断是否调换;接着,进行下一轮比较,第四个数作为待插入的数,与第三个数比较,比前一个数小才有机会与第二个数作比较……注意:往前推的时候要使下标都大于零

>>>时间复杂度(循环体需要执行的总次数):O(n*n)

>>>(python)代码实现1:

>>>(C语言)代码实现2:

 >>>我遇到的问题:python中while 语句的执行内容,即l[j+1]=l[j] ; l[j]=h 的表达方式写为l[i]=l[j];l[j]=h时,程序运行结果便不是我想要的;

C语言终于运行对了一次,就是在编写时规定j的循环表达方式有点困难。

猜你喜欢

转载自blog.csdn.net/qq_44119514/article/details/85073318