依旧基于原本的快速排序思想
将要排序的元素分割为两部分,采用了下面的算法
例如对一串字符'1a2b3c4d5e6f',我们获取其中的字母,将符合条件的元素往前换,同时进行设置count进行计数,最后截取出来
nums_1 = '1a2b3c4d5e6f' Str = list(nums_1) count = 0 for i in range(len(nums_1)): if not Str[i].isdigit(): temp = Str[i] Str[i] = Str[count] Str[count] = temp count += 1 print(Str[:count])
运行结果:
['a', 'b', 'c', 'd', 'e', 'f']
快速排序代码:
def division(nums, start, end): #key必然满足条件,直接跳过,从start+1处开始遍历, count = 0 key = nums[start] #相对key进行局部排序 for i in range(start + 1, end): if nums[i] <= key: temp = nums[i] nums[i] = nums[start + count + 1] nums[start + count + 1] = temp count += 1 #将主元放在空位 for i in range(count): nums[start + i] = nums[start + i + 1] nums[start + count] = key #返回主元下表 return start + count def quick_sort(list, first, last): if first < last - 1: pkindex = division(list, first, last) quick_sort(list, first, pkindex) quick_sort(list, pkindex + 1, last) return list def package(nums): start = 0 last = len(nums) return nums, start, last if __name__ == '__main__': nums = [5, 7, 3, -8, -9, 4, 65, 12, 6, -6, -12, 6] nums, start, last = package(nums) print(quick_sort(nums, start, last))
运行结果:
[-12, -9, -8, -6, 3, 4, 5, 6, 6, 7, 12, 65]