python八大排序算法
Posted 扎西德勒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python八大排序算法相关的知识,希望对你有一定的参考价值。
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)
以上是关于python八大排序算法的主要内容,如果未能解决你的问题,请参考以下文章