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個分組,最後分...