http://www.lintcode.com/zh-cn/problem/sort-integers-ii/

题目

给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。

样例

给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]

快速排序思路

每次拿第一个值开始从左到右进行比较,如果比第一个值小,中值得指针加1,与此同时如果中值指针不等于当前循环指针的话进行交换,保持比第一个值小的数是连续的,循环结束后将第一个值与中值指针的值交换,完成中值指针的值比左边的数都大,比右边的书都小,递归中值指针左右两边,直到左右指针相等完成排序。

实现代码

  1. class Solution:
  2. # @param {int[]} A an integer array
  3. # @return nothing
  4. def sortIntegers2(self, A):
  5. # Write your code here
  6. self.quickSort(A, 0,len(A))
  7.  
  8. def quickSort(self, array, start, end):
  9. if start < end: #边界条件
  10.  
  11. # 不断获取中值指针,不断左右递归直到边界条件
  12. parindex = self.partition(array, start, end)
  13. self.quickSort(array, start, parindex)
  14. self.quickSort(array, parindex + 1, end)
  15.  
  16. def partition(self, array, start, end):
  17. index = start # 中值指针
  18. num = array[start] # 初始比较值为第一个元素
  19. for i in xrange(start+1, end):
  20. if array[i] < num: # 如果小于则中值指针 +1
  21. index += 1
  22. if index != i:
  23. # 如果中值指针不等于循环指针,则代表其中间有比第一个元素大的值,所以要把这个比较小的值换过去
  24. # 使得比第一个元素小的值始终是连续的
  25. array[index], array[i] = array[i], array[index]
  26. # 当循环结束后,第二个元素到中值指针所在元素这一区间内所有的值都比第一个元素小
  27. # 所以将第一个元素跟指针元素交换,完成排序
  28. array[start], array[index] = array[index], array[start]
  29. return index

  

LinkCode 整数排序II的更多相关文章

  1. lintcode-464-整数排序 II

    464-整数排序 II 给一组整数,按照升序排序.使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法. 样例 给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, ...

  2. bitmap对海量无重复的整数排序--转

    原文地址:http://blog.csdn.net/u013074465/article/details/46956295 现在有n个无重复的正整数(n 小于10的7次方),如果内存限制在1.5M以内 ...

  3. 考查SQLite 3索引对整数排序的性能影响

    做个实验,想了解SQLite3索引对整数排序的性能影响. 用这个测试表,考查绿色那列: id name date 自增型主键 字符串型,随机生成 整数型 随机生成,范围0到54354354 1 bMz ...

  4. C语言:10个整数排序(别忘了负数)

    题目内容: 10个整数排序(别忘了负数) 例如 input 1 0 2 0 3 4 1 9 8 7 output 0 0 1 1 2 3 4 7 8 9 编码: void sort(int *a); ...

  5. lintcode-507-摆动排序 II

    507-摆动排序 II 给你一个数组nums,将它重排列如下形式 nums[0] < nums[1] > nums[2] < nums[3].... 注意事项 你可以认为每个输入都有 ...

  6. Leetcode 324.摆动排序II

    摆动排序II 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1: 输入: nums ...

  7. YTU 2427: C语言习题 整数排序

    2427: C语言习题 整数排序 时间限制: 1 Sec  内存限制: 128 MB 提交: 391  解决: 282 题目描述 用指向指针的指针的方法对n个整数排序并输出.要求将排序单独写成一个函数 ...

  8. 九度oj 题目1190:大整数排序

    题目1190:大整数排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4142 解决:1867 题目描述: 对N个长度最长可达到1000的数进行排序. 输入: 输入第一行为一个整数N,( ...

  9. Java实现 LeetCode 324 摆动排序 II

    324. 摆动排序 II 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]- 的顺序. 示例 1: 输入: n ...

随机推荐

  1. 2431: [HAOI2009]逆序对数列

    2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 954  Solved: 548[Submit][Status ...

  2. Team Foundation Server 基本功能

    Team Foundation Server(以下简称TFS)作为Microsoft发布的一个主要用于团队源代码管理工具,以敏捷开发作为其最大的特点而占领部分市场.该文主要介绍 TFS 在 Visua ...

  3. fopen中的mode(20161115)

    mode mode 参数指定了所要求到该流的访问类型.可以是以下: fopen() 中 mode 的可能值列表 mode 说明 'r' 只读方式打开,将文件指针指向文件头. 'r+' 读写方式打开,将 ...

  4. JS中有关对象的继承以及实例化、浅拷贝深拷贝的奥秘

    一.属性的归属问题 JS对象中定义的属性和方法如果不是挂在原型链上的方法和属性(直接通过如类似x的方式进行定义)都只是在该对象上,对原型链上的没有影响.对于所有实例共用的方法可直接定义在原型链上这样实 ...

  5. Python快速入门(4)

    输入输出: open() read() readine() readlines() write() pickle模块可以做序列化操作,持久保持对象的信息. 我们可以很容易的读写文件中的字符串.数值就要 ...

  6. docker使用Let’s Encrypt协议构建免费https协议

    简介:我们可以把自己的image上传到dockerhub或者阿里云的docker镜像仓库,但在实际使用中我们很多时候都用的是自己的registry,便于内部的共享等等优点,docker镜像默认支持ht ...

  7. Java核心编程快速学习

    Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体内容如下图所示. 反射reflect是理解Java语言工作原理的基础,Java编译器首先需要将我们编写的 ...

  8. 【Electron】Electron开发入门(二):创建项目Hello Word

    创建简单的Electron程序 1.首先,切换到你的项目空间,我的在 D:\ProjectsSpace\ElectronProjects\ElectronTest,ElectronTest是案例项目文 ...

  9. 【Egret】3D 使用中的一些疑难解决技巧!

    1.问题:目前Egret3D中,发布到手机后无法响应鼠标事件 解决方法:①打开发布后的libs/module/egret/egret.web.min.js,查找e.stopPropagation(), ...

  10. ajax大洋第一步

    Ajax工具包 Ajax并不是一项新技术,它实际上是几种技术,每种技术各尽其职,以一种全新的方式聚合在一起. 服务器端语言:服务器需要具备向浏览器发送特定信息的能力.Ajax与服务器端语言无关. XM ...