一.直接插入排序
算法原理:
将待排序序列分为有序区和无序区,每次将无序区中的第一个元素插入有序区中,直至无序区元素为空,排序完成。
(1)初始时,将待排序列的第一个元素作为有序区,其后剩余序列作为无序区。
(2)将无序区的第一个元素与有序区的元素从后往前比较大小,若小于,则将该有序区元素后移一位,直至出现大于等于的情况,便找到了插入位置。
(3)无序区元素为空时,排序完成。
python代码:
#直接插入排序
def insert_sort(numbers):
for i in range(1,len(numbers)): #从无序区的第一个元素开始进行排序
if numbers[i] < numbers[i-1]: #判断当前无序区的元素是否处于有序区的正确位置
t=numbers[i]
j = i-1
while t < numbers[j] and j >= 0: #查找元素在有序区的插入位置
numbers[j+1] = numbers[j]
j = j-1
numbers[j+1]=t #将元素插入
if __name__ == "__main__":
numbers=[34,92,46,11,2,78,10,28]
insert_sort(numbers)
print(numbers)
二.冒泡排序
算法原理:
对于待排序序列中两两相邻的元素进行大小比较,若不满足大小关系,则交换位置。每趟排序后,都会有一个最小(或者最大)元素到达它最终的位置上。进而缩小待排序列,直至待排序列只剩一个元素,则排序完成。
python代码:
#冒泡排序
def bubble_sort(numbers):
for i in range(0,len(numbers)-1):
j=len(numbers)-1 #每次的待排序序列范围为i~len(numbers)-1
while j > i:
if numbers[j] < numbers[j-1]: #若不满足大小关系,则交换元素位置
t=numbers[j]
numbers[j]=numbers[j-1]
numbers[j-1]=t
j = j-1
if __name__ ==