题解 | #寻找第K大# 纯quicksort 无优化
寻找第K大
http://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf
# -*- coding:utf-8 -*-
def swap(arr, idx1, idx2):
t = arr[idx1]
arr[idx1] = arr[idx2]
arr[idx2] = t
def findMedian(arr, left, right):
center = int((left + right) / 2)
if arr[left] < arr[center]: swap(arr, left, center)
if arr[left] < arr[right]: swap(arr, left, right)
if arr[center] < arr[right]: swap(arr, center, right)
return center
def QSort(arr, left, right):
center = findMedian(arr, left, right)
swap(arr, center, right)
pivot = arr[right]
i, j = 0, right
while i < j:
while arr[i] > pivot and i<j: i += 1
arr[j] = arr[i];
if i<j: j-=1
while arr[j] < pivot and i<j: j -= 1
arr[i] = arr[j];
if i<j: i += 1
arr[i] = pivot
if left < i - 1: QSort(arr, left, i - 1)
if i + 1 < right: QSort(arr, i + 1, right)
def quickSort(arr):
left, right = 0, len(arr) - 1
QSort(arr, left, right)
class Solution:
def findKth(self, a, n, K):
# write code here
quickSort(a)
return a[K-1]
查看15道真题和解析