python快速排序及其應用

2021-09-17 18:42:16 字數 2267 閱讀 2086

1、快速排序

def quicksort(arr):

length = len(arr)

if length < 2:

return arr

midarr = arr[int(length/2)]

left = [x for x in arr if x < midarr]

middle = [x for x in arr if x == midarr]

right = [x for x in arr if x > midarr]

return quicksort(left) +middle +quicksort(right)

def partition(a, left,right):

tmp = a[left]

while left < right:

while left < right and a[right] >= tmp:

right -= 1

a[left] = a[right]

while left < right and a[left] <= tmp:

left += 1

a[right] = a[left]

a[left] = tmp

return left

def quick_sort(a,left, right):

if left < right:

pos = partition(a, left, right)

quick_sort(a,left, pos-1)

quick_sort(a,pos+1, right)

return a

2、把乙個0-1串(只包含0和1的串)進行排序,你可以交換任意兩個位置,問最少交換的次數?

def changestr(str):

arr = list(str)

i = 0

j = len(arr) - 1

ret = 0

while i < j:

# if i == j:

# return ''.join(arr)

while arr[i] == '0':

i += 1

while arr[j] == '1':

j -= 1

if i < j:

tmp = arr[i]

arr[i] =arr[j]

arr[j] = tmp

ret += 1

return ''.join(arr),ret

3、實現對陣列奇數在前偶數在後

def changesort(arr):

length = len(arr)

i = 0

j = length - 1

while i < j:

while arr[i] % 2 == 1:

i += 1

while arr[j] % 2 == 0:

j -= 1

if i < j:

tmp = arr[i]

arr[i] = arr[j]

arr[j] = tmp

return arr

print(changesort([1,8,5,3,4,2,9,7,5]))

4、尋找陣列中第k大的數

def partition(a, left,right):

tmp = a[left]

while left < right:

while left < right and a[right] >= tmp:

right -= 1

a[left] = a[right]

while left < right and a[left] <= tmp:

left += 1

a[right] = a[left]

a[left] = tmp

return left

def findkth(a,left,right,k):

pos = partition(a, left,right)

if pos == k:

return a[pos]

elif pos < k:

return findkth(a,pos+1,right,k)

else:

return findkth(a, left, pos-1, k)

排序 快速排序及其優化

在排序中交換數字,達到排序的目的 由於 是c語言寫的,所以需要給出交換函式 如果是c 那麼就直接用交換函式 void swap int left,int right 先標記基準值 這裡先取最後乙個元素為基準值,記錄起來 之後定義兩個指標,然後前後遍歷,找到比基準值大的或者小的的元素的位置,然後進行標...

快速排序及其優化

include include 呼叫c 自帶sort include include include using namespace std define max 1000000 define k 12 ifdef debug define new new normal block,file lin...

快速排序及其分析

快速排序的平均情況下是o nlogn 但是一般都比其他執行時間為o nlogn 的演算法都要快,因為它隱藏的常數因子比較小,但是在最壞情況之下,快速排序的執行時間是o n2 快速排序採用的思想是分治思想,就像 合併排序演算法 的思想一樣,合併排序演算法是從陣列的中間開始分治,直到分為n個分組,最後分...