快速排序(quick sort)
1.原理
首先任意选取一个数据(通常选数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。
一轮快速排序的算法:
(1)设置两个变量i、j,排序开始的时候:i=0,j=n-1。
(2)以第一个数组元素作为关键数据,赋值给key,即key =A[0]。
(3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换(保证了要趋向于前方的关键码都小于key )。
(4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的值A[i],将A[i]和A[j]互换(保证了要趋向于后方的关键码都大于key)。
(5)重复第3、4步,直到 i=j ,完成本轮比较。
2.Python实现快速排序
# 快速排序的Python实现(quickSort) def quick_sort(nums,start,end): if start < end: i,j = start,end # 设置关键数据 key = nums[i] while i < j: # 由后开始向前搜索(j--),找到第一个小于key的值nums[j],赋值给nums[i] while (i < j) and (nums[j] >= key): j=j-1 nums[i] = nums[j] # 由前开始向后搜索(i++),找到第一个大于key的值nums[i],赋值给nums[j] while (i < j) and (nums[i] <= key): i = i + 1 nums[j] = nums[i] # 完成第一轮比较后,列表被分成了两个半区,并且i=j # 把关键数据key赋值给i=j时的这个数nums[i] nums[i] = key #递归前半区 quick_sort(nums, start, i - 1) #递归后半区 quick_sort(nums, j + 1, end) return nums if __name__ == '__main__': list1 = [77,64,89,61,97,70] print("快速排序后:",quick_sort(list1,0,len(list1)-1))