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

来源:互联网 发布:部落冲突九本升级数据 编辑:程序博客网 时间:2024/06/09 17:34

包括quick_sort(不稳定), merge_sort(稳定), bubble_sort(稳定), selection_sort(不稳定), insertion_sort(稳定)

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

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 heredef 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 idef 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 += 1def 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:                breakif __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
0 0
原创粉丝点击