算法学习
各种排序算法的Python实现
1.冒泡算法 :
冒泡排序可以把排序的变化过程想象成气泡从水中升起一样,非常的富有美感。谁有程序员没有审美的?
上面我们通过拿第一个数跟后面的依次比较,最后得出了最小数。如果我们用同样的方法从剩余的数组中拿出第二小的数,拿出第三小的数,这样我们不就完成了数组的排序么?理一下思路,我们需要两层循环。
'''
冒泡排序
'''
def bubble_sort(sort_list):
iter_len = len(sort_list)
if iter_len < 2:
return sort_list
for i in range(iter_len-1):
for j in range(iter_len-i-1):
if sort_list[j] > sort_list[j+1]:
sort_list[j],sort_list[j+1] = sort_list[j+1],sort_list[j]
return sort_list
sort_list = [1,5,6,8,9,2,4]
print(bubble_sort(sort_list))
#[1, 2, 4, 5, 6, 8, 9]
2.插入排序:
在玩扑克的时候我们通常会选择把抽到的牌插入到合适的位置,这样就可以保证在抽牌结束之后我们手中的牌是呈序列显示。借鉴此思路,我们可以拿当前的数与排序好的数组比较,若比已排好的数组中的数值小,则已排的数值后移,继续比较,指到遇到比已拍好的数值小的,则将其放入即可。后续重复进行此操作。
def insertion_sort(sort_list):
iter_len = len(sort_list)
if iter_len < 2:
return sort_list
for i in range(1, iter_len):
key = sort_list[i]
j = i - 1
while j>=0 and sort_list[j]>key:
sort_list[j+1] = sort_list[j]
j =j - 1
sort_list[j+1] = key
return sort_list
sort_list = [1,5,6,8,9,2,4,50,7]
print(bubble_sort(sort_list))
#[1, 2, 4, 5, 6, 7, 8, 9, 50]
3.选择排序:
选择排序跟冒泡排序非常相似,冒泡排序是每次如果比它小就会交换位置,而选择排序不会马上交换位置,而是将比它小的数字的位置保存下来,直到循环结束后才交换位置。
def selection_sort(sort_list):
iter_len = len(sort_list)
if iter_len < 2:
return sort_list
for i in range(len(sort_list)-1):
smallest = sort_list[i]
location = i
for j in range(i,iter_len):
if sort_list[j] < smallest:
smallest = sort_list[j]
location = j
if i != location:
sort_list[i],sort_list[location] = sort_list[location],sort_list[i]
return sort_list
sort_list = [1,5,6,8,9,2,4,50,7,504,551,1226]
print(bubble_sort(sort_list))
#[1, 2, 4, 5, 6, 7, 8, 9, 50, 504, 551, 1226]

浙公网安备 33010602011771号