第一次写,编程算法能力太差,可能程序过于复杂臃肿,希望通过以后的学习,再回头看可以进行修改精简。
'''
先从待排序序列中选出一个数作为基准,然后对除该数外的其它数进行分区,小于该数的排在其左边,大于的放在右边,按顺序放即可,不在意大小顺序。
分区之后,新序列分为三部分,[小于基准,基准,大于基准],然后再对基准两侧序列分别进行上述操作,直至待分区的子序列只有一个数位置。
完成排序。
'''
def toSort(list):
temp = list[0]
temp_list_left = []
temp_list_right = []
for i in list[1:]:
if i <= temp:
temp_list_left.append(i)
else:
temp_list_right.append(i)
return temp_list_left, temp, temp_list_right
###########################这三个QuickSort都可以##############################################
def QuickSort(list, final_list):
temp_list_left, temp, temp_list_right = toSort(list)
if len(temp_list_left) >= 2:
final_list = QuickSort(temp_list_left, final_list)
elif len(temp_list_left) > 0:
final_list = final_list + temp_list_left + [temp]
return final_list
final_list = final_list + [temp]
if len(temp_list_right) >= 2:
final_list = QuickSort(temp_list_right, final_list)
return final_list
else:
final_list = final_list + temp_list_right
return final_list
# def QuickSort(list):
# final_list = []
# temp_list_left, temp, temp_list_right = toSort(list)
# if len(temp_list_left) >= 2:
# temp_list = QuickSort(temp_list_left)
# final_list.extend(temp_list)
# elif len(temp_list_left) > 0:
# final_list.extend(temp_list_left+[temp])
# return final_list
# final_list.extend([temp])
# if len(temp_list_right) >= 2:
# temp_list = QuickSort(temp_list_right)
# final_list.extend(temp_list)
# return final_list
# else:
# final_list.extend(temp_list_right)
# return final_list
def QuickSort(lists):
final_list = []
temp_list_left, temp, temp_list_right = toSort(lists)
for ele in (temp_list_left, temp, temp_list_right):
if isinstance(ele, list):
if len(ele) >= 2:
temp_list = QuickSort(ele)
else:
temp_list = ele
final_list.extend(temp_list)
else:
final_list.extend([temp])
return final_list
#################################################################################
a = [12, 34, 15, 2, 45, 48, 231, 5, 13, 89]
final_list = []
final_list = QuickSort(a, final_list)
print(final_list)