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)