leetcode总结-- 排序算法(内部排序)
2016-01-18 15:36
441 查看
包括quick_sort(不稳定), merge_sort(稳定), bubble_sort(稳定), selection_sort(不稳定), insertion_sort(稳定)
code整理如下,我们可以发现所有的O(n2n^2)方法,都是
说明它们都要进行len(nums) - 1次循环,例如bubble_sort要冒泡len(nums) - 1次。
ref: http://www.jianshu.com/p/ae97c3ceea8d
http://www.jianshu.com/p/f5baf7f27a7e
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
相关文章推荐
- AndroidJNI 通过C/C++调用JAVA
- Bootstrap面包屑导航、分页、标签、徽章
- java通用日期转换(string 转 date)
- Spring配置文件中的 default-lazy-init="true"
- Linux meld安装
- 【人脸识别】初识人脸识别
- Prison Jamming system remote control by PC
- PCFI
- java入门学习(10)—抽象类
- <context:component-scan>使用说明
- I/O端口的访问
- Java细节之static方法重写
- ListView布局之View复用原理举例
- 已经完成的习惯
- 读取固定ResourceBundle
- Windows下移动MariaDB数据目录 (转!)
- vb 定时执行php程序
- 【菜鸟学Java】10:Cookie技术
- POJ 2975 Nim题解
- xUtils更新到3.0后的基本使用规则