zoukankan      html  css  js  c++  java
  • Python小程序——线性时间排序

     1 '''最好让k的值与list的元素数量n差不多,如果是n的幂的话就不合适了'''
     2 
     3 
     4 def init_part(k,out_list):
     5     #k is the max int of out_list.Value in out_list is larger than >= 0.
     6     Assist_list = []
     7     Assist_list_2 = []
     8     for i in range(0,k+1,1): #consider the value 0.#initial the Assist_list and 2
     9         Assist_list.append(0)
    10         Assist_list_2.append(0)
    11 
    12     for i in range(0,len(out_list),1):
    13     #put the value in the Assist_list
    14         Assist_list[out_list[i]] +=1
    15 
    16     res=0
    17     for i in range(0,k+1,1):
    18         #get the final assit list. 将Assist_list里面的每个位的数量转化为位置数。
    19         Assist_list_2[i] = res + Assist_list[i]
    20         res = res + Assist_list[i]
    21     # print('Assit list is ',Assist_list_2)
    22     return Assist_list_2
    23 
    24 def sort_func(list1,list2):
    25     import copy
    26     list3 = copy.deepcopy(list1)
    27     # print('list3 is ',list3)
    28     end_num = len(list1)
    29     for i in range(end_num-1,-1,-1):
    30         tmp_num = list1[i]
    31         sort_num = list2[tmp_num]-1
    32         list2[tmp_num] -= 1
    33         list3[sort_num] = list1[i]
    34         # print('list3 end is ', list3)
    35         # print('list2 end is', list2)
    36     return list3
    37 
    38 def liner_time_sort(target_list):
    39     max_value = max(target_list)
    40     temp_list = init_part(max_value,target_list)
    41     final_list= sort_func(target_list,temp_list)
    42     print('final list is ',final_list)
    43     return final_list
    44 
    45 if __name__=="__main__":
    46 
    47     a= [4,1,2,4,3,7,2,1,2,3,4,6,3,1,1,1,1,12,1,1,1,1111,11111,10]
    48     b = [32,34,21,45,666,213,41,23,78,64,36,83,18,41,332,6466,432]
    49     import time
    50     # t1=time.time()
    51     # Final_list = liner_time_sort(b)
    52     # t2 = time.time()
    53     # print('total time is ',t2-t1)
    54     t1 = time.time()
    55     Final_list = liner_time_sort(a)
    56     t2 = time.time()
    57     print('total time is ', t2 - t1)
  • 相关阅读:
    区块链到底是什么?
    Focusky:把每个PPT都变成3D动画
    c# 嵌入资源文件
    向ArcGIS的ToolBarControl中添加任意的windows控件的方法
    C# 获得MP4时长
    arcmap Command
    C# PPT 查找替换
    C# 操作PPt,去掉文本框的边框
    arcgis 按面积分割, 按比例分割面积,按等份批量面积分割工具
    电动自行车如何过马路?规定:下车推行!
  • 原文地址:https://www.cnblogs.com/Ian-learning/p/8780940.html
Copyright © 2011-2022 走看看