015.【排序算法】快速排序法

1. 快速排序法

快速排序法又称为分割交换法,它是冒泡排序法的一种改进。它的基本思想是:先在数据中找一个虚拟的中间值,并按此中间值将所有打算排序的数据分为两部分。其中,小于中间值的数据放在左边,大于中间值的数据放在右边,再用同样的方式处理左、右两边的数据,直到排序完成。

快速排序法最后的结果也有两种形式,即递增数列和递减数列。

2. 使用快速排序法进行递增排序

使用快速排序法为列表:6,1,2,7,9,3,4,5,10,8,进行递增排序。具体代码如下:

def quick(data,start,end):                       	# 定义快速排序法函数
    if start>end:                          			# 如果开始值大于结束值
        return                          			# 直接退出程序
    i,j=start,end
    result=data[start]                        		# 取虚拟中间值
    while True:                                    	# 循环
        while j>i and data[j]>=result:            	# 从右向左找,找到的数比虚拟中间值小就停止循环
            j=j-1                       			# 从右向左找,位置每次-1
        while i<j and data[i]<=result:            	# 从左向右找,找到的数比虚拟中间值大就停止循环
            i+=1                        			# 从左向右找,位置每次+1
        if i<j:                          			# i和j都停止,找到对应的位置,判断i<j
            data[i],data[j]=data[j],data[i]       	# 交换位置i和j对应的数值
        elif i>=j:                                	# 判断i>=j
            # 交换虚拟中间值和j位置上的数,此时虚拟中间值变成真正中间值
            data[start],data[j]=data[j],data[start]
            Break                          			# 完成第一次排序,此时以中间值分左右两侧
    quick(data,start,i-1)                       	# 调用快速排序函数,再快速排序左半边数据
    quick(data,  i + 1,end)                    		# 调用快速排序函数,再快速排序右半边数据

 

data=[6,1,2,7,9,3,4,5,10,8]                      	# 定义列表并初始化
print("原始数据为:")
print(data)                               			# 输出原始数据
print("--------------------------------")
quick(data,0,(len(data)-1))                      	# 调用快速排序,数据从位置0开始,到数据长度-1为止
print("排序之后的数据为:")
print(data)                               			# 输出排序后数据
print("--------------------------------")

猜你喜欢

转载自blog.csdn.net/qq_42226855/article/details/131227643