Python排序算法(二) 快速排序、希尔排序、归并排序
生活随笔
收集整理的這篇文章主要介紹了
Python排序算法(二) 快速排序、希尔排序、归并排序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
這篇文章有的排序算法是:快速排序、希爾排序、歸并排序。
快速排序
''' 快速排序 '''def quick_sort(aList, first, last):if first >= last:returnmin_val = aList[first]low_index = firsthight_index = lastwhile low_index < hight_index:# hight 左移動while low_index < hight_index and min_val <= aList[hight_index]:hight_index -= 1aList[low_index] = aList[hight_index]# low 右移動while low_index < hight_index and min_val > aList[low_index]:low_index += 1aList[hight_index] = aList[low_index]aList[low_index] = min_val# 左邊quick_sort(aList, first, low_index - 1)# 右邊quick_sort(aList, low_index + 1, last)if __name__ == "__main__":li = [54, 26, 93, 17, 77, 31, 44, 55, 20]# li = [26, 93, 54]print(li)quick_sort(li, 0, len(li) - 1)print(li)快速排序的思路是:
1、從列表中找出一個元素,min_val 作為“基準(zhǔn)”元素。
2、然后對列表進行排序,排序的規(guī)則是,比min_val基準(zhǔn)元素小的放在基準(zhǔn)元素的左邊,比min_val 基準(zhǔn)元素大的放在基準(zhǔn)元素的右面。這個時候基準(zhǔn)元素就在這個列表的中間的位置。這個稱為分區(qū)操作。
3、遞歸進行操作,就是在把基準(zhǔn)元素左邊的元素當(dāng)做一個列表重復(fù)第2步操作,把基準(zhǔn)元素左邊的元素當(dāng)做一個列表重復(fù)第2步操作。
歸并排序
''' 歸并排序 '''def merge_sort(aList):n = len(aList)if n <= 1:return aListmid = n//2left_li = merge_sort(aList[:mid])right_li = merge_sort(aList[mid:])left_pointer, right_pointer = 0, 0result = []while left_pointer < len(left_li) and right_pointer < len(right_li):if left_li[left_pointer] <= right_li[right_pointer]:result.append(left_li[left_pointer])left_pointer += 1else:result.append(right_li[right_pointer])right_pointer += 1result += left_li[left_pointer:]result += right_li[right_pointer:]return resultif __name__ == "__main__":li = [54, 26, 93, 17, 77, 31, 44, 55, 20]print(li)a = merge_sort(li)print(a)歸并排序的思路是:
1、歸并排序的思想就是先遞歸分解數(shù)組,再合并數(shù)組。
2、然后將兩個列表第一個元素進行比較,將小的數(shù)據(jù)push到新的列表里面。
希爾排序
''' 希爾排序 '''def shell_sort(aList):n = len(aList)gap = n // 2while gap > 0:for j in range(gap, n):i = jwhile i > 0:if aList[i] < aList[i - gap]:aList[i - gap], aList[i] = aList[i], aList[i - gap]i -= gapelse:breakgap //= 2if __name__ == "__main__":li = [54, 26, 93, 17, 77, 31, 44, 55, 20]print(li)shell_sort(li)print(li)?
總結(jié)
以上是生活随笔為你收集整理的Python排序算法(二) 快速排序、希尔排序、归并排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】那些决定模型上限的操作
- 下一篇: ECharts 仪表盘的轴线宽度修改