八大排序算法的python实现(四)快速排序
生活随笔
收集整理的這篇文章主要介紹了
八大排序算法的python实现(四)快速排序
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
代碼:
#coding:utf-8 #author:徐卜靈 #交換排序.快速排序 # 雖然快速排序稱為分治法,但分治法這三個(gè)字顯然無法很好的概括快速排序的全部步驟。因此我的對(duì)快速排序作了進(jìn)一步的說明:挖坑填數(shù)+分治法: # import sys # sys.setrecursionlimit(150000) L = [6, 3, 2, 32, 5, 4]def Fast_sort(L, left,right):if left >= right:return Lkey = L[left]low = lefthigh = rightwhile left < right:# if L[right] > key:# right-=1# else:# L[left] = L[right]# if L[left] <= key:# left += 1# else:# L[right] = L[left]# L[left] = keywhile left < right and L[right] >= key:right -= 1L[left] = L[right]while left < right and L[left] <= key:left += 1L[right] = L[left]L[left] = keyFast_sort(L, low, left - 1)Fast_sort(L,left + 1,high)return L print Fast_sort(L,0,5)# 1.高質(zhì)量代碼 # def quick_sort(lists, left, right): # # 快速排序 # if left >= right: # return lists # key = lists[left] # low = left # high = right # while left < right: # while left < right and lists[right] >= key: # right -= 1 # lists[left] = lists[right] # while left < right and lists[left] <= key: # left += 1 # lists[right] = lists[left] # lists[left] = key # quick_sort(lists, low, left - 1) # quick_sort(lists, left + 1, high) # return lists # print quick_sort(L,0,5)#2.高質(zhì)量代碼 # # 設(shè)置最低位和最高位 # def quickSort(nums, low, high): # # 設(shè)置一個(gè)比較基準(zhǔn)key # key = nums[low] # while low<high: # # 如果最高位的數(shù) 大于等于 key則向前走 # while low<high and nums[high] >= key: # high -= 1 # # 如果最低位的數(shù) 小于等于 key則向后走 # while low<high and nums[low] <= key: # low += 1 # # 交換值 # nums[low], nums[high] = nums[high], nums[low] # # #最后low=high, 此時(shí)交換key和high位上的值, 使小于key的值在key左邊, 大的在key右邊 # nums[nums.index(key)], nums[low] = nums[low], nums[nums.index(key)] # # 返回最低位的位置 # return low # # # # 進(jìn)行重復(fù)操作 # def interval(nums, low, high): # if low<high: # # 進(jìn)行排序并得到最低位位置以循環(huán)操作 # key_index = quickSort(nums, low, high) # interval(nums, low, key_index) # interval(nums, key_index+1, high) # # # nums = [64,3,9,2,4,7,0,12,45,] # interval(nums, 0, len(nums)-1) # print nums #算法理解上沒有什么問題,問題在算法實(shí)現(xiàn)上。特別注意的是幾個(gè)索引,low 和 high 做一下緩存。
另外,在用遞歸的時(shí)候,一定注意迭代停止的判斷條件。我在寫代碼的時(shí)候就一直忘了加判斷條件,結(jié)果總是提示錯(cuò)誤。一個(gè)簡單的錯(cuò)誤就搞這么久。
時(shí)間復(fù)雜度:O(nlogn)
空間復(fù)雜讀:O(nlogn)
非穩(wěn)定排序算法。
大多數(shù)情況下的最優(yōu)選的排序算法,時(shí)間復(fù)雜度低嘛。
轉(zhuǎn)載于:https://www.cnblogs.com/xubing-613/p/7286268.html
總結(jié)
以上是生活随笔為你收集整理的八大排序算法的python实现(四)快速排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python第四篇:linux命令行总结
- 下一篇: 机器学习优化方法总结比较(SGD,Ada