Python3实现选择排序和插入排序
- 一、选择排序的实现
- 原理思路
- 代码实现
- 小结
- 二、插入排序实现
- 原理思路
- 代码实现
- 小结
- 项目地址
一、选择排序的实现
原理思路
- 对给定的一组数据,经过第一轮依次比较,找到最小的那个数,然后把最小的那个数和第一个数交换;
- 然后继续对不包括第一个数的剩余的数进行第二轮依次比较,找到最小的那个数,然后和第二个数进行交换;
- 以此类推,直至进行比较的数只剩一个停止。
代码实现
def seletion_sort(collecion):
# 选择排序
length = len(collection)
for i in range(length - 1): # 比较length-1轮就可以排好序
least = i
for j in range(i+1, length):
if collection[j] < collection[least]:
least = j
collection[i], collection[least] = collection[least], collection[i]
return collection
if __name__ == '__main__':
collection = list(map(int, input().split()))
print('排序前:', end='')
for i in collection:
print(i, end=' ')
collection = selection_sort(collection)
print('排序后:', end=' ')
for i in collection:
print(i, end=' ')
小结
选择排序是一种不稳定的排序方法,因为选择排序不管是否已经排序好,都会依次比较所有的数,所以最好、最坏和平均情况下的时间复杂度都为O(n2),空间复杂度为O(1)。
二、插入排序实现
原理思路
- 对于给定的一组数据,初始时把第一个数作为一个有序序列,其余的数为无序序列;
- 取出无序序列的第1个数,与有序序列中最后一位开始作比较,插入到有序序列中;
- 不断重复,直至无序序列全部插入到有序序列中停止。
代码实现
def insertion_sort(collection):
# 插入排序
length = len(collection)
for i in range(1, length): # 第一个数作为初始有序序列,所以不用比较
j = i - 1
while j >= 0 and collection[j + 1] < collection[j]:
collection[j], collection[j + 1] = collection[j + 1], collection[j]
j -= 1
return collection
if __name__ == '__main__':
collection = list(map(int, input().split()))
print('排序前是:', end='')
for i in collection:
print(i, end=' ')
collection = insertion_sort(collection)
print('\n排序后是:', end='')
for i in collection:
print(i, end=' ')
小结
插入排序 是一种稳定的排序方法,最好情况下(即已经排好序)的时间复杂度为O(n),最坏 条件下的时间复杂度为O(n2),平均时间情况下时间复杂度为O(n2),空间复杂度为O(1)。
项目地址
后续实现的一些算法我都会统一放到GitHub,欢迎小伙伴们一起交流、学习,一起进步!下面是我的GitHub网址。
Github Data_Structure_and_Algorithm