好多天都没写了,最近实在太忙了,今天抽空利用python把这三个排序算法实现一下。
一、交换排序
交换排序借鉴了求最小值的思想,n个数要比较n-1轮,每一轮都找出最大值或者最小值,但它的性能相对较低。
例如:列表a = [1,2,4,3,6,5,8](下面的排序都以这个为例)。
a = [1,2,4,3,6,5,8]
for i in range(0,len(a)-1): #控制比较的轮数
for j in range(i+1,len(a)): #控制每轮比较的次数
if a[i]<a[j]: #从大到小排列
a[i],a[j] = a[j],a[i] #利用序列解包交换这两个数的值
print(a) #打印输出a
二、选择排序
选择排序是指在程序的内循环中,只要找到概论循环中最小数的下标就可以了,当这一轮循环结束时,进行一次交换。
a = [1,2,4,3,6,5,8]
for i in range(0,len(a)-1): #控制循环次数
p = i #把要比较的每个数的下标赋值为p
for j in range(i+1,len(a)): #把下标i后面的数与a[i]进行比较
if a[j]>a[p]: #如果后面的数比a[p]大,就把这个大的数字的下标赋值给p
p = j
if p!=i: #如果这一轮结束后,a[i]还是最大的,就不用交换值,否则就利用序列解包交换他们的值
a[i],a[p] = a[p],a[i]
print(a)
三、冒泡排序
冒泡排序是将相邻的数两两比较,将小的数字交换到前面,大的数字交换到后面。
a = [1,2,4,3,6,5,8]
for i in range(0,len(a)-1): #比较的轮数,n个数比较n-1轮
for j in range(0,len(a)-i-1): #每一轮进行比较的次数
if a[j]>a[j+1]: #每一轮两两比较,从大到小排列
a[j],a[j+1] = a[j+1],a[j] #利用序列解包进行交换
print(a)
今天就写到这吧,有兴趣的咱们可以一起交流!