简单选择排序:
m_lst = [ [1,2,3,4,5,6,7,8,9], [2,3,4,5,7,8,9,6,1], [9,8,7,6,5,4,3,2,1] ] nums = m_lst[0] count_swap = 0 count_inter = 0 for i in range(len(nums)): maxindex = i for j in range(i+1,len(nums)): count_inter += 1 if nums[j] > nums[maxindex]: maxindex = j if maxindex != i: nums[i],nums[maxindex] = nums[maxindex],nums[i] count_swap += 1 print('Swap:{} Inter:{} Result:{}'.format(count_swap,count_inter,nums))运行结果:
Swap:4 Inter:36 Result:[9, 8, 7, 6, 5, 4, 3, 2, 1]案例变形1:(二元排序)
m_lst = [ [1,2,3,4,5,6,7,8,9], [2,3,4,5,7,8,9,6,1], [9,8,7,6,5,4,3,2,1] ] nums = m_lst[0] count_swap = 0 count_inter = 0 for i in range(len(nums)//2): maxindex = i minidex = -i-1 minorigin = minidex for j in range(i+1,len(nums)-i): count_inter += 1 if nums[j] > nums[maxindex]: maxindex = j if nums[-j-1] < nums[minidex]: minidex = -j-1 print(maxindex,minidex) if maxindex != i: nums[i],nums[maxindex] = nums[maxindex],nums[i] count_swap += 1 if i == minidex or i == len(nums) + minidex: minidex = maxindex if minorigin != minidex: nums[minorigin],nums[minidex] = nums[minidex],nums[minorigin] count_swap += 1 print('Swap:{} Inter:{} Result:{}'.format(count_swap,count_inter,nums))运行结果:
8 -9 7 -8 6 -7 5 -6 Swap:8 Inter:20 Result:[9, 8, 7, 6, 5, 4, 3, 2, 1]案例变形2:
m_lst = [ [1,2,3,4,5,6,7,8,9], [2,3,4,5,7,8,9,6,1], [9,8,7,6,5,4,3,2,1], [1,1,1,1,1,1,1,1,1] ] nums = m_lst[3] count_swap = 0 count_inter = 0 for i in range(len(nums)//2): maxindex = i minidex = -i-1 minorigin = minidex for j in range(i+1,len(nums)-i): count_inter += 1 if nums[j] > nums[maxindex]: maxindex = j if nums[-j-1] < nums[minidex]: minidex = -j-1 print(maxindex,minidex) if nums[maxindex] == nums[minidex]: break if maxindex != i: nums[i],nums[maxindex] = nums[maxindex],nums[i] count_swap += 1 if i == len(nums) + minidex: minidex = maxindex if minorigin != minidex: nums[minorigin],nums[minidex] = nums[minidex],nums[minorigin] count_swap += 1 print('Swap:{} Inter:{} Result:{}'.format(count_swap,count_inter,nums))运行结果:
0 -1 Swap:0 Inter:8 Result:[1, 1, 1, 1, 1, 1, 1, 1, 1]案例变形3:
m_lst = [ [1,2,3,4,5,6,7,8,9], [2,3,4,5,7,8,9,6,1], [9,8,7,6,5,4,3,2,1], [1,1,1,1,1,1,1,1,1], [1,1,1,1,1,1,1,1,2] ] nums = m_lst[4] count_swap = 0 count_inter = 0 for i in range(len(nums)//2): maxindex = i minidex = -i-1 minorigin = minidex for j in range(i+1,len(nums)-i): count_inter += 1 if nums[j] > nums[maxindex]: maxindex = j if nums[-j-1] < nums[minidex]: minidex = -j-1 print(maxindex,minidex) if nums[maxindex] == nums[minidex]: break if maxindex != i and nums[maxindex] != nums[i]: nums[i],nums[maxindex] = nums[maxindex],nums[i] count_swap += 1 if i == len(nums) + minidex: minidex = maxindex if minorigin != minidex and nums[minorigin] != nums[minidex]: nums[minorigin],nums[minidex] = nums[minidex],nums[minorigin] count_swap += 1 print('Swap:{} Inter:{} Result:{}'.format(count_swap,count_inter,nums))运行结果:
8 -2 1 -2 Swap:1 Inter:14 Result:[2, 1, 1, 1, 1, 1, 1, 1, 1]