Ejemplo n.º 1
0
        for i in datalist:
            if i >= L and i <= H:
                P.append(i)
        if k >= Lp and k <= Lh and len(P) <= (4 * datasize + 1):
            P.sort()
            return P[k - Lp]
        #return None


if __name__ == "__main__":
    # datasize_list = [1000, 2000, 5000, 10000, 20000, 50000, 100000]
    # 从列表中随机选择一个数据集大小
    #  datasize = random.choice(datasize_list)
    # 随机生成datasize个范围再(0,1000000)的数
    datasize = 50000
    datalist = brand.get_many_data(datasize, 0, 1000000)
    # print  datalist[0:30]
    #k=input('请输入k值:(k<%d)'%datasize)
    k = 10
    #  cishu=0
    #  sum=0
    #for  i  in range(1):
    start = time.time()
    m = lazy_select(datalist, 0, datasize - 1, k)
    #if m != None:
    end = time.time()
    print m
    # cishu+=1
    thistime = (end - start) * 1000
    #    sum+=thistime
    ##用于验证正确
三路快排函数
输入:待排序数组,l:数组起始位置,r:数组长度-1
作用:将数组进行排序
输出:返回已排好的数组
'''
def quick_sort_three_ways(nums,l,r):
    if l<r:
        lt,gt= partition_three_ways(nums,l,r)
        quick_sort_three_ways(nums,l,lt-1)
        quick_sort_three_ways(nums,gt,r)
    return nums



if __name__ == "__main__":
    #尝试无重复数据集的排序
    for i in range(11):
        repeatnumber=100000*i       # print repeatnumber
        test=bigdata.get_many_data(1000000,0,1000000,repeatnumber)
        print "开始10^6个,重复数为:%d的内置函数sort排序...." %repeatnumber
       # shuffle(test)
        start=time.time()
        #print len(test)
        quick_sort_three_ways(test, 0, 1000000-1)
        #quicksort(test,0,10000-1)
     #   test.sort()
        end=time.time()
        print "10^6个重复数:%d的数据集排序时间" %repeatnumber,round(end-start,2)
        print "排序后前50个数:"
        print test[0:50]