失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python实现冒泡 选择 插入排序(凑合着看)

python实现冒泡 选择 插入排序(凑合着看)

时间:2021-11-26 04:41:17

相关推荐

python实现冒泡 选择 插入排序(凑合着看)

前言:

排序无非把无序列表变为有序列表

而且python还有内置函数sort(),但是为了学习算法还是的了解一下这三人组算法

1.冒泡排序

1.思想

1.列表每相邻的两个数,按大小规则,交换位置

2.一趟排序后,无序列表少一个数,有序列表多一个数

2.算法流程:

1.有n个数就要排序n-1次

2.每i次排序的比较次数为n-1-i次

3.每次排序的比较中,大小不一的,就按照升序或是降序的规则,交换顺序

3.算法实现:

#这是按照从小到大的排序def maopao(li):flag = 0#控制循环次数,有n个数,就循环n-1次for i in range(len(li)-1):#没一躺比较,两数比较的次数就是n - 第几趟比较 - 1for j in range(len(li)-i-1):if li[j] > li[j+1]:#两个数交换位置flag = li[j + 1]li[j + 1] = li[j]li[j] = flagreturn li

2.选择排序:

1.思想:(就是每一次找最小的数放到前面 )

1.在列表中,查找一个最小的数放到第一位,然后将原来第一位的数和查找最小的数的位置他两互换,

2.然后从第二位数开始,在这些数中查找一个最小的数放到第二位,然后将原来第二位的数和查找最小的数的位置他两互换

.......

3.然后从第i位数开始,在这些数中查找一个最小的数放到第i位,然后将原来第i位的数和查找最小的数的位置他两互换

2.代码实现

def select_sort(li):for i in range(len(li)-1):min_local = i #假定第i次比较,以无序区第一个数设为最小值,第一次比较,就设第一个数最小,第i次比较,就设第i次最小#然后跟后面的数比较,如果找到一个数比min_local小标的数小,则将min_local记录为这个数的下标for j in range(i,len(li)):if li[min_local] > li[j]:min_local = j#在第i躺,循环结束后,交换最小数和无序区第一个数的位置li[i] , li[min_local] = li[min_local] , li[i]return li

3.插入排序:

1.思想:

1.相当于打牌时,对牌数的大小进行排序,

2.例如先摸到一个牌,

3.然后摸到第二个牌时候这个牌比较,

4.比他大则插到这张牌的后面,比他小则插到这张牌的前面,

5.然后再摸牌,摸到的牌与之前已经摸到并排好序的牌比较,在排好序牌中从右往左与摸到牌比较,

6.摸到的牌比排好序的牌比较,比它大则这些牌向后移,比它小则这个牌插到排好序的牌的后面

2.算法:

1.定义有一个列表:

2.循环遍历这个列表

3.再循环的过程中,用一个数来存储摸到的牌的值

4.然后再内嵌一个循环,用来循环遍历已经排好序的牌,用来跟摸到的牌来进行比较,

5.摸到的牌比排好序的牌比较,比它大则这些牌向后移,比它小则这个牌插到排好序的牌的后面

6.摸到的牌是比较,排好序的牌是被比较的

3.代码实现:

def insert_sort(li):#为什么从1开始呢,因为我们假定第一张牌就是已经再手里的牌了,不是摸到的,#再从len(li)中区膜牌for i in range(1,len(li)):#用一个变量来存储摸到的牌count = li[i]#j表示的是已经拍好序牌中的最右边的下表j = i - 1while j >= 0 and li[j] < count:#将牌向后移动li[j+1] = li[j]#同时将j向前移动一位j -= 1#循环结束表示找到了,但是这是后你会发现,j+1的位置是空的,而这正是之前牌后移动的结果,所以直接查插到这个位置li[j + 1] = countreturn li

如果觉得《python实现冒泡 选择 插入排序(凑合着看)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。