排序算法
#首先,先随机生成10个在1000内的正整数:
import random
def randomlist(n):
ilist=[]
for i in range(n):
ilist.append(random.randrange(1000))
return ilist
if __name__=="__main__":
ilist=randomlist(10)
print(ilist)
冒泡排序
冒泡排序的原理是:比较相邻两个数字的大小,将两数中较大的那个放在后面的位置,这样不断地交换就可以将数字放到队列的尾部,然后重头再次交换。
import random
def randomlist(n):
ilist=[]
for i in range(n):
ilist.append(random.randrange(1000))
return ilist
ilist=randomlist(10)
def bubbleSort(ilist):
for i in range(1,len(ilist)):
for j in range(0,len(ilist)-1):
if ilist[j]>=ilist[j+1]:
ilist[j],ilist[j+1]=ilist[j+1],ilist[j]
print('第%d轮的排序结果:'%i,end='')
print(ilist)
return ilist
if __name__=='__main__':
print(ilist)
bubbleSort(ilist)
选择排序
选择排序的原理是:从数列中不断找最小或者最大的那个数。
import random
def randomlist(n):
ilist=[]
for i in range(n):
ilist.append(random.randrange(1000))
return ilist
ilist=randomlist(10)
def selectSort(ilist):
for i in range(0,len(ilist)-1):
if ilist[i]!=min(ilist[i:]):
minIndex=ilist.index(min(ilist[i:]))
ilist[i],ilist[minIndex]=ilist[minIndex],ilist[i]
return ilist
if __name__=="__main__":
print(ilist)
print(selectSort(ilist))
``##插入排序
import random
def randomlist(n):
ilist=[]
for i in range(n):
ilist.append(random.randrange(1000))
return ilist
ilist=randomlist(10)
def insertsort(ilist):
if len(ilist)<=1:
return ilist
for right in range(1,len(ilist)):
target=ilist[right]
for left in range(0,right):
if target<=ilist[left]:
ilist[left+1:right+1]=ilist[left:right]#这里把位置往后移动1
ilist[left]=target#把最小值放在左边
break
print('第%d轮的排序结果是:' % (right), end='')
print(ilist)
return ilist
if __name__ == "__main__":
print(ilist)
insertsort(ilist)
```#这个算法最重要的部分就是如何保证把数字插入到左边想插入的位置,实现的方法就是
if target<=ilist[left]:
ilist[left+1:right+1]=ilist[left:right]
ilist[left]=target
比如说 3 5(left) 2,那么这个时候由于2是小于3的,所以在left=0的时候,就会满足if的循环条件,把3 5往后面移动1,再把2放在left
再比如 3 5(left)4,这时候4是大于3小于5的,所以要在left=1的时候才会满足循环,这个时候,相当于是只把5的位置往后面移动1,再把4放在left(此时left=1)