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)
  • 相关阅读:
    Leetcode 126.单词接龙II
    Leetcode 125.验证回文串
    Leetcode 124.二叉树中的最大路径和
    Leetcode 123.买卖股票的最佳时机III
    Leetcode 122.买卖股票的最佳时机II
    西子凌波回复集5(网友整理版)
    西子凌波回复集4(网友整理版)
    西子凌波回复集3(网友整理版)
    K杀(逻辑-标准-规则)
    西子凌波49:2018年11月29日微博解盘提示
  • 原文地址:https://www.cnblogs.com/Ian-learning/p/8780940.html
Copyright © 2011-2022 走看看