defbubbleSort(list):iflist!=None:iflen(list)==1:passelse:for i inrange(len(list)):for j inrange(len(list)-1-i):iflist[j]>list[j+1]:list[j],list[j+1]=list[j+1],list[j]if __name__ =='__main__':
list1 =[2,3,5,7,8,9,6,54,1,42]
bubbleSort(list1)print(list1)
插入排序
将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。
definsertSort(list):iflist!=None:iflen(list)==1:passelse:for i inrange(1,len(list)):
temp =list[i]for j inrange(i):iflist[j]>list[i]:for k inrange(i,j,-1):list[k]=list[k-1]list[j]= temp
if __name__ =='__main__':
list1 =[2,3,5,7,8,9,6,54,1,42]print(list1)
insertSort(list1)print(list1)
快速排序
通过一趟排序将要排序的数据分割成独立的两部分
其中一部分的所有数据都比另外一部分的所有数据都要小
然后再按此方法对这两部分数据分别进行快速排序
整个排序过程可以递归进行
以此达到整个数据变成有序序列。
defpartion(nums,left,right):
key = nums[left]while left < right:# right下标位置开始,向左边遍历,查找不大于基准数的元素while left < right and nums[right]>= key:
right -=1if left < right:# 找到小于准基数key的元素,然后交换nums[left],nums[right]
nums[left],nums[right]= nums[right],nums[left]else:# left〉=right 跳出循环break# left下标位置开始,向右边遍历,查找不小于基准数的元素while left < right and nums[left]< key:
left +=1if left < right:# 找到比基准数大的元素,然后交换nums[left],nums[right]
nums[right],nums[left]= nums[left],nums[right]else:# left〉=right 跳出循环breakreturn left #此时left==right 所以返回right也是可以的#realize from book "data struct" of author 严蔚敏defquick_sort_standord(nums,left,right):if left < right:
key_index = partion(nums,left,right)
quick_sort_standord(nums,left,key_index)
quick_sort_standord(nums,key_index+1,right)
num=[2,4,2,7,9,0,3,4,5,2,3,6]
quick_sort_standord(num,0,len(num)-1)print(num)
选择排序
从所有序列中先找到最小的,然后放到第一个位置
之后再看剩余元素中最小的,放到第二个位置……
以此类推,就可以完成整个的排序工作。
defselectSort(list):iflist!=None:for i inrange(len(list)):min= i
for j inrange(i+1,len(list)):iflist[min]>list[j]:min= j
ifmin!= i:list[min],list[i]=list[i],list[min]if __name__ =='__main__':
list1 =[2,3,5,7,8,9,6,54,1,42]print(list1)
selectSort(list1)print(list1)
希尔排序
先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序
然后依次缩减增量再进行排序,
待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。
defshellSort(data,flag):'''
:param data: list, to be sorted
:param flag: 0 -> asc, 1 -> desc
:return: a new sorted list
'''
retData=[]for item in data:
retData.append(item)
count =len(retData)
step = count //2# python3while step >0:
i =0while i< count:
j = i + step
while j < count:
t = retData.pop(j)
k = j - step
# ascif flag ==0:while k>=0:if t >= retData[k]:
retData.insert(k+1,t)break
k = k - step
if k <0:
retData.insert(0,t)# descelif flag ==1:while k >=0:if t <= retData[k]:
retData.insert(k+1, t)break
k = k - step
if k <0:
retData.insert(0, t)
j = j + step
i = i +1
step = step//2return retData
if __name__ =='__main__':
list1 =[2,3,5,7,8,9,6,54,1,42]
data = shellSort(list1,0)print('ASC:')print(data)
data = shellSort(list1,1)print('DESC:')print(data)
冒泡排序比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素经过几次移动,会最终浮到水面上。def bubbleSort(list): if list != None: if len(list) ==1: pass else: for i in range(len(list)): ...