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

  • 相关阅读:
    poj 1328 Radar Installation (贪心)
    hdu 2037 今年暑假不AC (贪心)
    poj 2965 The Pilots Brothers' refrigerator (dfs)
    poj 1753 Flip Game (dfs)
    hdu 2838 Cow Sorting (树状数组)
    hdu 1058 Humble Numbers (DP)
    hdu 1069 Monkey and Banana (DP)
    hdu 1087 Super Jumping! Jumping! Jumping! (DP)
    必须知道的.NET FrameWork
    使用记事本+CSC编译程序
  • 原文地址:https://www.cnblogs.com/onenoteone/p/12441780.html
Copyright © 2011-2022 走看看