zoukankan      html  css  js  c++  java
  • 基于栈的10亿数字快速排序

    1. 参考点对换操作

    def PartSort(array, left, right):
        '''
        left到right的错位替换
        :param array:
        :param left:
        :param right:
        :return:相遇点
        '''
        kid = right
        key = array[kid]#参考比对点,left<right时,left>key的和right<key的元素对换
        while left < right:
            #左边会停留在一个大于key值的元素位置
            while left < right and array[left] <= key:
                left += 1
            #右边会停留在小于key或者right等于left的位置
            while left < right and array[right] >= key:
                right -= 1
            array[left], array[right] = array[right], array[left]
        array[left], array[kid] = array[kid], array[left]
        return left

    2.排序程序

    def QuickSort_stack(array, left, right):
        if left >= right:
            return
        stack = []
        stack.append([left, right])
        while len(stack) != 0:
            out = stack.pop()
            index = PartSort(array, out[0], out[1])
            if out[0] < index - 1:
                stack.append([out[0], index - 1])
            if index + 1 < out[1]:
                stack.append([index + 1, out[1]])
    

    创建数字:

    def ct_data(size=2 ** 5, rdm=True):
        data = np.arange(size)
        if rdm:
            np.random.shuffle(data)
        return data

    3.执行:

    if __name__ == '__main__':
        data = ct_data(2 ** 30, True)
        left = 0
        right = len(data) - 1
        # print(data)
    
        start = time.clock()
        QuickSort_stack(data, left, right)
        end = time.clock()
        print(data)
        print(end - start)

    2^30=1 073 741 824,10亿级别,如果单纯用递归,一般只能到百万级别既2^15-20左右。

    最终单机电脑上10亿随机数排序结果很久,但是可以执行。如果是2^50这样大,则会报内存错位。

  • 相关阅读:
    JDBC编程步奏、问题总结(一)
    基于注解的Spring AOP的配置和使用--转载
    什么是aop?-------转
    The JSP specification requires that an attribute name is preceded by whitespace--异常
    使用注解来构造IoC容器-转
    Java单元测试(Junit+Mock+代码覆盖率)---------转
    Linux 杂项
    Sequence
    vim编辑器高亮sv语法
    linux 权限 chmod 755
  • 原文地址:https://www.cnblogs.com/onenoteone/p/12441780.html
Copyright © 2011-2022 走看看