冒泡和插数的算法对于大量数据效率太低,可以用下面这种方法。
1 def flag_sort(array,start,end): 2 """ 3 原理:拿出数组的第一个数,从后至前跟进行比较,当其小于等于某个数时互相位置,然后从前至刚才交换的位置重复上一步操作。 4 重复上述操作直到最开始拿出的那个数左边都小于它,右边的数都大于它。 5 将数组从拿出的数最终的位置,左右分为两个数组,重复上述步骤,直到数组不可再分,即完成排序。 6 """ 7 if start >= end: 8 return 9 flag = array[start] 10 flag_left = start 11 flag_right = end 12 13 while flag_right > flag_left: 14 15 while flag < array[flag_right] and flag_right >flag_left: 16 flag_right -= 1 17 array[flag_left],array[flag_right] = array[flag_right],array[flag_left] 18 19 while flag >= array[flag_left] and flag_right >flag_left: 20 flag_left += 1 21 array[flag_left],array[flag_right] = array[flag_right],array[flag_left] 22 23 flag_sort(array,start,flag_right-1) 24 flag_sort(array,flag_right+1,end)