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这样大,则会报内存错位。

  • 相关阅读:
    Java I/O的典型使用方式
    搜索--hiho 骑士问题
    编程之美--水王(找出出现超过1/2的数)
    深入理解java虚拟机之类文件结构以及加载
    【转载】Java JVM 运行机制及基本原理
    整数的划分总结(转)
    java静态方法和非静态方法
    mongodb 运行错误总结
    MongoDb windows环境安装,附百度云链接
    JAVA解析Json数据
  • 原文地址:https://www.cnblogs.com/onenoteone/p/12441780.html
Copyright © 2011-2022 走看看