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)
原文地址:https://www.cnblogs.com/Ian-learning/p/8780940.html