八大排序演算法的python實現(四)快速排序

2022-07-20 07:06:10 字數 2557 閱讀 6786

**:

#

coding:utf-8

#author:徐卜靈

#交換排序.快速排序

#雖然快速排序稱為分治法,但分治法這三個字顯然無法很好的概括快速排序的全部步驟。因此我的對快速排序作了進一步的說明:挖坑填數+分治法:

#import sys

#sys.setrecursionlimit(150000)

l = [6, 3, 2, 32, 5, 4]

deffast_sort(l, left,right):

if left >=right:

return

l key =l[left]

low =left

high =right

while left #if l[right] > key:

#right-=1

#else:

#l[left] = l[right]

#if l[left] <= key:

#left += 1

#else:

#l[right] = l[left]

#l[left] = key

while 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] =key

fast_sort(l, low, left - 1)

fast_sort(l,left + 1,high)

return

lprint fast_sort(l,0,5)

#1.高質量**

#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.高質量**

## 設定最低位和最高位

#def quicksort(nums, low, high):

## 設定乙個比較基準key

#key = nums[low]

#while low#

# 如果最高位的數 大於等於 key則向前走

#while low= key:

#high -= 1

## 如果最低位的數 小於等於 key則向後走

#while low#

low += 1

## 交換值

#nums[low], nums[high] = nums[high], nums[low]##

#最後low=high, 此時交換key和high位上的值, 使小於key的值在key左邊, 大的在key右邊

#nums[nums.index(key)], nums[low] = nums[low], nums[nums.index(key)]

## 返回最低位的位置

#return low##

## 進行重複操作

#def interval(nums, low, high):

#if low#

# 進行排序並得到最低位位置以迴圈操作

#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

#

演算法理解上沒有什麼問題,問題在演算法實現上。特別注意的是幾個索引,low 和 high 做一下快取。

另外,在用遞迴的時候,一定注意迭代停止的判斷條件。我在寫**的時候就一直忘了加判斷條件,結果總是提示錯誤。乙個簡單的錯誤就搞這麼久。

時間複雜度:o(nlogn)

空間複雜讀:o(nlogn)

非穩定排序演算法。

大多數情況下的最優選的排序演算法,時間複雜度低嘛。

八大排序演算法python實現

1.氣泡排序 氣泡排序重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端,故名。步驟 比較相鄰的元素。如果第乙個比第二個大,就交...

八大排序演算法

1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length void shell ...

八大排序演算法

一 概述 八大排序演算法包括 1 插入排序之直接插入排序 straight insertion sort 2 插入排序之希爾排序 shells sort 3 選擇排序之簡單選擇排序 selection sort 4 選擇排序之堆排序 heap sort 5 交換排序之氣泡排序 bubble sort...