数据结构之简单排序
因为要做数据结构的大作业了,这一个学期都浑浑噩噩的过来了,上课也没好好听,打算把老师PPT上涉及的东西都做一遍。
1.冒泡排序
思想:对每两个相邻的元素进行比较,若为逆序,则将两者交换,这样的操作反复进行,直至全部记录都比较、交换完毕为止。如此经过一趟冒泡排序之后,就将关键字最大(或最小)的元素安排在最后一个(或第一个) 元素的位置上。然后,对后n-1个元素重复进行同样的操作,则将具有次大(或次小)元素安排在倒数(或正数)第二个元素的位置上。重复以上过程,直至没有元素需要交换时为止。至此,整个序列的记录按关键字由小到大的顺序排列完毕。
def bubble_sort(lst):
for i in range(len(lst)-1):
for j in range(len(lst)-1-i):
if lst[j] > lst[j+1]:
lst[j],lst[j+1] = lst[j+1],lst[j]
print(lst)
bubble_sort([43,18,9,13,55,7,42])
运行过程:
[18, 9, 13, 43, 7, 42, 55]
[9, 13, 18, 7, 42, 43, 55]
[9, 13, 7, 18, 42, 43, 55]
[9, 7, 13, 18, 42, 43, 55]
[7, 9, 13, 18, 42, 43, 55]
[7, 9, 13, 18, 42, 43, 55]
我这个是把最大的冒泡到最后一个
2.选择排序
第一趟:从所有元素中找出最小的放在第一个位置
第二趟:从第一个位置之后的所有元素中找到最小的放在第二个位置
…
def choose_sort(lst):
for i in range(len(lst)-1):
k = i
for j in range(i+1,len(lst)-1):
if lst[j] < lst[k]:
lst[j],lst[k] = lst[k],lst[j]
print(lst)
choose_sort([43,18,9,13,55,7,42])
运行过程:
[7, 43, 18, 13, 55, 9, 42]
[7, 9, 43, 18, 55, 13, 42]
[7, 9, 13, 43, 55, 18, 42]
[7, 9, 13, 18, 55, 43, 42]
[7, 9, 13, 18, 43, 55, 42]
[7, 9, 13, 18, 43, 55, 42]
表元素排序
def lst_sort(lst) :
for i in range(1, len(lst)): # seg [0:1] is sorted
x = lst[i]
j = i
while j > 0 and lst[j-1] > x:
lst[j] = lst[j-1]
# 反序逐个后移元素,直至确定插入位置
j -= 1
lst[j] = x
print(lst)
lst_sort([2,1,3,0])
运行过程:
[1, 2, 3, 0]
[1, 2, 3, 0]
[0, 1, 2, 3]