- 需求:输入 n 个整数并将这些数字以从大到小和从小到大的顺序输出
- 代码如下:
- bubble_sort_v1   1 #coding:utf-8
 2 #__author__ = 'Diva'
 3 
 4 #  升序(从小到大)
 5 SORT_TYPE_ASC = 1
 6 #  降序(从大到小)
 7 SORT_TYPE_DESC = -1
 8 
 9 def swap(slist, ia, ib):
10     tmp = slist[ia]
11     slist[ia] = slist[ib]
12     slist[ib] = tmp
13 
14 # 基本的冒泡排序
15 def sort(sort_type, sort_list):
16     i = 0
17     size = len(sort_list)
18     while i < size:
19         j = 0
20         while j < size - 1:
21             if (sort_type == SORT_TYPE_ASC and sort_list[j] > sort_list[j + 1]) or (sort_type == SORT_TYPE_DESC and sort_list[j] < sort_list[j + 1]):
22                 swap(sort_list, j, j + 1 )
23             j += 1
24         i += 1
25 
26 if __name__ == '__main__':
27     mylist = [3, 5, 2, 1, 4]
28     sort(SORT_TYPE_ASC, mylist)
29     print('mylist sort as asc: %s' % (mylist))
30     sort(SORT_TYPE_DESC, mylist)
31     print('mylist sort as desc: %s' % (mylist))
 
 
 - bubble_sort_v2   1 #coding:utf-8
 2 #__author__ = 'Diva'
 3 
 4 #  升序(从小到大)
 5 SORT_TYPE_ASC = 1
 6 #  降序(从大到小)
 7 SORT_TYPE_DESC = -1
 8 
 9 def swap(slist, ia, ib):
10     tmp = slist[ia]
11     slist[ia] = slist[ib]
12     slist[ib] = tmp
13 
14 # 优化排序次数,每轮选出当前范围数组内的极值(最大,最小),并不断减少数组范围
15 def sort_v2(sort_type, sort_list):
16     i = 0
17     size = len(sort_list)
18     while i < size:
19         t = i
20         j = i + 1
21         while j < size:
22             if(sort_type == SORT_TYPE_ASC and sort_list[t] > sort_list[j]) or (sort_type == SORT_TYPE_DESC and sort_list[t] < sort_list[j]):
23                 t = j
24             j += 1
25         if t != i:
26             swap(sort_list, t, i)
27         i += 1
28 
29 if __name__ == '__main__':
30     mylist = [3, 5, 2, 1, 4]
31     sort_v2(SORT_TYPE_ASC, mylist)
32     print('mylist sort as asc: %s' % (mylist))
33     sort_v2(SORT_TYPE_DESC, mylist)
34     print('mylist sort as desc: %s' % (mylist))
 
 
 - bubble_sort_v3   1 #coding:utf-8
 2 #__author__ = 'Diva'
 3 
 4 #  升序(从小到大)
 5 SORT_TYPE_ASC = 1
 6 #  降序(从大到小)
 7 SORT_TYPE_DESC = -1
 8 
 9 def swap(slist, ia, ib):
10     tmp = slist[ia]
11     slist[ia] = slist[ib]
12     slist[ib] = tmp
13 
14 #  再次简化判断条件
15 def sort_v3(sort_type, sort_list):
16     i = 0
17     size = len(sort_list)
18     while i < size:
19         t = i
20         j = i + 1
21         while j < size:
22             #if(sort_type == SORT_TYPE_ASC and sort_list[t] > sort_list[j]) or (sort_type == SORT_TYPE_DESC and sort_list[t] < sort_list[j]):
23             if (sort_list[t] - sort_list[j]) * sort_type > 0:
24                 t = j
25             j += 1
26         if t != i:
27             swap(sort_list, t, i)
28         i += 1
29 
30 if __name__ == '__main__':
31     mylist = [3, 5, 2, 1, 4]
32     sort_v3(SORT_TYPE_ASC, mylist)
33     print('mylist sort as asc: %s' % (mylist))
34     sort_v3(SORT_TYPE_DESC, mylist)
35     print('mylist sort as desc: %s' % (mylist))
   
- 测试结果:
 -   
转载于:https://www.cnblogs.com/divablogs/p/7510911.html