您的位置:首页 > 其它

leetcode总结-- 排序算法(内部排序)

2016-01-18 15:36 441 查看
包括quick_sort(不稳定), merge_sort(稳定), bubble_sort(稳定), selection_sort(不稳定), insertion_sort(稳定)

code整理如下,我们可以发现所有的O(n2n^2)方法,都是

for i in xrange(len(nums) - 1):


说明它们都要进行len(nums) - 1次循环,例如bubble_sort要冒泡len(nums) - 1次。

ref: http://www.jianshu.com/p/ae97c3ceea8d

http://www.jianshu.com/p/f5baf7f27a7e

# your code goes here

def quick_sort(nums, low, high):

p = nums[low]
i,j = low, high

while i < j:

while j > i and nums[j] >= p:
j -= 1

nums[i] = nums[j]
while i < j and nums[i] <= p:
i += 1

nums[j] = nums[i]
nums[i] = p
return i

def qsort(nums, low, high):

if low < high:
loc = quick_sort(nums, low, high)
qsort(nums, low, loc - 1)
qsort(nums, loc + 1, high)

def merge_sort(nums):

if len(nums) > 1:
mid = len(nums) / 2
left = nums[:mid]
right = nums[mid:]
merge_sort(left)
merge_sort(right)

i,j = 0,0
k = 0

while i < len(left) and j < len(right):
if left[i] <= right[j]:
nums[k] = left[i]
i += 1
else:
nums[k] = right[j]
j += 1
k += 1

while i < len(left):
nums[k] = left[i]
i += 1
k += 1

while j < len(right):
nums[k] = right[j]
j += 1
k += 1

def bubble_sort(nums):

for i in xrange(len(nums) - 1):
for j in xrange(len(nums) - 1 - i):# it is not length - 2 - i
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]

def selection_sort(nums):
for i in xrange(len(nums) - 1):

min_idx = i
for j in xrange(i + 1, len(nums)):
if nums[j] < nums[min_idx]:
min_idx = j
if min_idx != i:
nums[i], nums[min_idx] = nums[min_idx], nums[i]

def insertion_sort(nums):

for i in xrange(len(nums) - 1):

for j in xrange(i + 1, -1, -1):
if nums[j] < nums[j - 1]:
nums[j], nums[j - 1] = nums[j - 1], nums[j]
else:
break

if __name__ == '__main__':
a = [1,4,8,2,9,2]
#qsort(a,0, len(a) - 1)
#merge_sort(a)
#bubble_sort(a)
#selection_sort(a)
insertion_sort(a)
print a
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: