zoukankan      html  css  js  c++  java
  • LinkCode 整数排序II

    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,与此同时如果中值指针不等于当前循环指针的话进行交换,保持比第一个值小的数是连续的,循环结束后将第一个值与中值指针的值交换,完成中值指针的值比左边的数都大,比右边的书都小,递归中值指针左右两边,直到左右指针相等完成排序。

    实现代码

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

      

  • 相关阅读:
    调试技巧--Windows端口号是否被占用
    如何制定自己的职业规划
    SQL总结(四)编辑类
    SQL总结(三)其他查询
    CompareAndSwap原子操作原理
    JVM调优之服务内存超过阈值报警
    Javassist中文技术文档
    微言Netty:分布式服务框架
    共享变量边界处理
    Netty客户端发送消息并同步获取结果
  • 原文地址:https://www.cnblogs.com/LiCheng-/p/6623152.html
Copyright © 2011-2022 走看看