print("冒泡排序")
def bubbleSort(input_list):
'''
函数说明:冒泡排序(升序)
:param input_lis: 待排序列表
:return:sorted_list :升序排好的列表
'''
if len(input_list) == 0:
return []
sorted_list = input_list
for i in range(len(sorted_list)-1):
bchanged =False
# print("第%d趟排序:"%(i-1))
for j in range(len(sorted_list)-1):
if sorted_list[j + 1] < sorted_list[j]:
sorted_list[j],sorted_list[j+1] = sorted_list[j+1],sorted_list[j]
bchanged =True
# print(sorted_list)
if not bchanged :
break
return sorted_list
if __name__ == '__main__':
input_list =[50,2,4,5,99,44,33,66,77,88]
print("排序前",input_list)
sorted_list = bubbleSort(input_list)
print("排序后",sorted_list)
print("-"*50)
print('直接插入排序')
def inserSort(input_list):
'''
函数说明:直接插入排序
:param input_list: 待排序的列表
:return: sorted_list 排序号的列表
'''
if len(input_list) == 0 :
return []
sorted_list =input_list
for i in range(1,len(sorted_list)):
temp = sorted_list[i]
j = i -1
while j >=0 and temp < sorted_list[j]:
sorted_list[j+1] = sorted_list[j]
j -=1
sorted_list[j+1] = temp
return sorted_list
if __name__ == '__main__':
input_list = [6,4,8,9,2,3,1]
print("排序前",input_list)
sorted_list = bubbleSort(input_list)
print("排序后",sorted_list)
print("-"*50)
print("希尔排序")
def shellSort(input_list):
length =len(input_list)
if length <=1:
return input_list
sorted_list = input_list
gap = length // 2
while gap > 0 :
for i in range(gap,length):
j = i -gap
temp = sorted_list[i]
while j >= 0 and temp < sorted_list[j]:
sorted_list[j +gap] = sorted_list[j]
j -=gap
sorted_list[j + gap] = temp
gap //= 2
return sorted_list
if __name__ == '__main__':
input_list = [50,123,53,154,34,6,7,46,78,67]
print("排序前",input_list)
sorted_list = bubbleSort(input_list)
print("排序后",sorted_list)
print("-"*50)
'''快速排序'''
def QuickSort(input_list , left,right):
'''
函数说明:快速排序(升序)
:param input_list:
:param left:
:param right:
:return:
'''
def division(input_list,left,right):
'''
函数说明:根据left和right进行一次扫描,重新找到基准数
:param input_list: 待排序列
:param left: 左指针位置
:param right: 右指针位置
:return: left 新的基准位置
'''
base =input_list[left]
while left < right :
while left < right and input_list[right] >=base:
right -=1
input_list[left] =input_list[right]
while left < right and input_list[left] <=base :
left +=1
input_list[right] = input_list[left]
input_list[left] = base
return left
if left < right :
base_index = division(input_list,left,right)
QuickSort(input_list,left,base_index - 1)
QuickSort(input_list,base_index + 1,right )
if __name__ == '__main__':
input_list = [6,3,4,6,7,8,2,1]
print("排序前",input_list)
sorted_list = bubbleSort(input_list)
print("排序后",sorted_list)
print("-"*50)
print("简单选择排序")
def Selectsort(input_list):
'''
函数说明:简单选择排序(升序)
:param input_list: 待排序列表
:return: sortde_list : 升序排好序的列表
'''
if len(input_list) == 0 :
return []
sorted_list =input_list
length = len(sorted_list)
for i in range(length):
min_index = 1
for j in range(i + 1 ,length):
if sorted_list[min_index] > sorted_list[j]:
min_index = j
temp =sorted_list[i]
sorted_list[i] = sorted_list[min_index]
sorted_list[min_index] = temp
return sorted_list
if __name__ =="__main__":
input_list =[4,3,1,6,7,8,9,5,2]
print("排序前",input_list)
sorted_list = bubbleSort(input_list)
print("排序后",sorted_list)
print("-"*50)
print("堆序列")
def HeadSort(input_list):
'''
函数说明:堆排序(升序)
:param input_list: 待排序列表
:return: sorted_list:升序排序好的列表
'''
def HeadAdjust(input_list,parent,length):
'''
函数说明:堆调整,调整为最大堆
:param input_list: 待排序列表
:param parent: 堆的父节点
:param length: 数组长度
:return: 无
'''
temp = input_list[parent]
child = 2*parent +1
while child < length :
if child +1 <length and input_list[child]<input_list[child+1]:
child +=1
if temp >=input_list[child]:
break
input_list[parent] = input_list[child]
parent =child
child = 2 *parent +1
input_list[parent] = temp
if len(input_list) == 0 :
return []
sorted_list =input_list
length =len(sorted_list)
for i in range(0,length // 2 +1 )[::-1]:
HeadAdjust(sorted_list,i ,length)
for j in range(1,length)[::-1]:
temp =sorted_list[j]
sorted_list[j] = sorted_list[0]
sorted_list[0] = temp
HeadAdjust(sorted_list,0,j )
print("第%d趟排序:"%(length-j ),end="")
print(sorted_list)
return sorted_list
if __name__ == '__main__':
input_list = [3,5,6,7,8,21,2,1]
print("排序前",input_list)
sorted_list = bubbleSort(input_list)
print("排序后",sorted_list)
print("-"*50)
print("归并排序")
def MergeSort(input_list):
'''
函数说明:归并排序(升序)
:param input_list: 待排序列表
:return: sorted_list:升序排序好的列表
'''
def merge(input_list,left,mid,right,temp):
'''
函数说明:合并函数
:param input_list:待合并列表
:param left: 左指针
:param mid:
:param right:右指针
:param temp: 临时列表
:return:
'''
i = left
j = mid +1
k = 0
while i <= mid and j <= right :
if input_list[i] <= input_list[j]:
temp[k] = input_list[i]
i +=1
else:
temp[k] = input_list[j]
j +=1
k +=1
while i <= mid:
temp[k] = input_list[i]
i +=1
k +=1
while j <=right:
temp[k] = input_list[j]
j +=1
k +=1
def merge_sort(input_list,left,right,temp):
if left >= right:
return
mid = (right + left) //2
merge_sort(input_list,left,mid,temp)
merge_sort(input_list,mid+1,right,temp)
merge(input_list,left,mid,right,temp)
if len(input_list) == 0 :
return []
sorted_list = input_list
temp = [0]* len(sorted_list)
merge_sort(sorted_list,0,len(sorted_list)-1,temp)
return sorted_list
if __name__ == '__main__':
input_list = [3,5,6,2,1,0,4,8,9]
print("排序前",input_list)
sorted_list = bubbleSort(input_list)
print("排序后",sorted_list)
print("-"*50)
print("基数排序")
def RadixSort(input_list):
'''
函数说明:基数排序(升序)
:param input_list: 待排序列表
:return: sorted_list 升序排序好的列表
'''
def MaxBit(input_list):
'''
函数说明:求出数组中最大数的位数的函数
:param input_list: 待排序列表
:return: bits_num 位数
'''
max_data = max(input_list)
bits_num = 0
while max_data :
bits_num +=1
max_data //= 10
return bits_num
def digit(num,d):
'''
函数说明:取数xxx数上的第d位数字
:param num: 带操作的数
:param d: 第d位的数
:return: 取数结果
'''
p = 1
while d > 1 :
d -=1
p *=10
return num // p % 10
if len(input_list) ==0:
return []
sorted_list = input_list
lenght = len(sorted_list)
bucket = [0]*lenght
for i in range(1,MaxBit(sorted_list)+1):
count =[0]*10
for i in range(0,lenght):
count[i] += count[i -1]
for i in range(0,lenght)[::-1]:
k = digit(sorted_list[i],d)
bucket[count[k]-1] = sorted_list[i]
count[k] -=1
for i in range(0,lenght):
sorted_list[i] =bucket[i]
return sorted_list
if __name__ == '__main__':
input_list =[50,123,543,134,5,76,8,6,9,89,56,45]
print("排序前",input_list)
sorted_list = bubbleSort(input_list)
print("排序后",sorted_list)