冒泡排序:
冒泡排序就是两个for 循环的嵌套, 外部循环每循环一次,就可以找到该列表中最小或最大的一个数据,
内部循环每循环一次只做两个相邻的数据对比
如何将这个数据放到它 排序对应的位置, 如: 我是从小到大进行排序的, 那么,我外部第一次循环结束就可以得到整个列表中最小的值
如何将它放到下标为0的位置
lists = [42, 16, 84, 12, 77, 26, 53, 84, 10, 11, 12, 77, 42, 42]
for i in range(len(lists)):
for j in range(len(lists)-1):
if lists[j] > lists[j+1]:
lists[j], lists[j+1] = lists[j+1], lists[j]
内部循环是以外部循环的位置+1当做起点,与外部循环 i 数据进行对比
插入排序:
插入就是比较当前循环到的数据和上一个数据进行对比, 如果当前的数据大于上一个的数据,那么就进行位置调换
一直循环比较到 下标为 0 的位置或当前的数据小于上一个位置的数据
当前代码是从大到小排序
def run(li):
for i in range(1, len(li)):
while i > 0:
# 判断当前循环到的列表下标的值是否大于当前下标-1 的值,如果大于,则会换位置,
if li[i] < li[i - 1]:
li[i], li[i - 1] = li[i - 1], li[i]
# 换完位置后将当前下标-1设置为换位置后的数据,让第二次while循环判断,如果i-1=0了,则证明
# 当前的这位数是当前for循环中遇到的最大的数了,就可以结束 while 循环了
i -= 1
# 如果不大于则结束当前while 因为不需要再判断了
else:
break
希尔排序:
希尔排序就是一个更高级的插入排序, 它对比的数据不是连续的,通过拆分数据将数据进行对比,这样的好处比插入排序更有效的是在
如果列表中最后一个数据是要放到最前面的时候,插入排序就需要依次循环完整个列表才能将最后这个数据放到最前面, 而希尔排序是
隔着几个数据进行比较的,这样就不会出现插入排序这种情况
def shell_sort(alist):
n = len(alist)
gap = n // 2
while gap >= 1:
for j in range(gap, n):
i = j
while i - gap >= 0:
if alist[i] < alist[i - gap]:
alist[i], alist[i - gap] = alist[i - gap], alist[i]
i -= gap
else:
break
gap //= 2
选择排序:
选择排序就是在外部定义一个记录当前列表最大或最小值的下标,如 index 然后内部for循环结束后就可以得到当前循环的列表中的最大或最小值的下标,
然后将它放到对应的位置, 如,外部循环是调用次的时候,i 的值是 0,然后将记录好的下标的数据进行调换
lists[i], lists[index] = lists[index], lists[i]
lists = [42, 16, 84, 12, 77, 26, 53, 84, 10, 11, 12, 77, 42, 42]
for i in range(0, len(lists)):
nums = i
for j in range(i+1, len(lists)):
if lists[j] > lists[nums]:
nums = j
lists[i], lists[nums] = lists[nums], lists[i]
冒泡和选择挺像的,外部for循环一次都可以获取最大或最小值