排序-快速

代码中写了三种快速排序的方法:

假设列表中第一个元素为中间值,那么就从左、右两个方向朝中间遍历与中间值比较,比其小的放左边,比其小的放右边。
当左、右指针变量相等时,完成第一次排序,保
在左边的都比中间值小,在右边的都比中间值大。

然后递归调用该方法,从而实现最终的整个列表排序。
中间值(该值每次假设是列表中的首个位置的值(注意其是变化的))
left --> <----right

简单说,就是每次拿列表中第一个元素的值作为比较的值,然后对列表进行第一次遍历,小的大的放右边,完成第一次排序。
第二次就利用递归的时间,直到列表中的元素小于2个,即可递归调用结束。

python代码如下:
"""
快速排序
"""

"""
#第一种比较土的办法
def quickSortData(disorderList,start,end):
    if start > end:
        return
    compareValue = disorderList[start]
    left = start
    right = end

    while left<right:
        #先从右边开始遍历
        while right>left and disorderList[right] > compareValue:
            right -= 1
        disorderList[left] = disorderList[right]
        # 然后再到左边
        while left < right and disorderList[left] <= compareValue :
            left += 1
        disorderList[right] = disorderList[left]

    disorderList[left] = compareValue

    quickSortData(disorderList, start, left-1)
    quickSortData(disorderList, left+1, end)
"""
"""
第二种方法:每次求出high应该在列表中的位置,然后不断递归遍历
""" def partition(arr, low, high): i = (low - 1) # 最小元素索引 pivot = arr[high] for j in range(low, high): # 当前元素小于或等于 pivot if arr[j] <= pivot: i = i + 1 arr[i], arr[j] = arr[j], arr[i] arr[i + 1], arr[high] = arr[high], arr[i + 1] return (i + 1) def quickSortData(disorderList,start,end): if start < end: mid = partition(disorderList, start, end) quickSortData(disorderList, start, mid - 1) quickSortData(disorderList, mid + 1, end) """ #第三种方法:这种方法思路比较清晰 def quickSortData(sortedList): if (len(sortedList) < 2): return sortedList mid = sortedList[0] left,right = [],[] sortedList.remove(mid) for i in sortedList: if i<=mid : left.append(i) else: right.append(i) return quickSortData(left) + [mid] +quickSortData(right) """ def main(): data = list(map(int,input("请输入需要排序的列表,逗号间隔:").split(","))) #第一种方法 #quickSortData(data,0,len(data)-1) # 第二种方法 quickSortData(data,0,len(data)-1) #第三种方法 #dataList = quickSortData(data) print("快速排序后的列表为:",end="") print(data) #print(dataList) if (__name__ == "__main__"): main()


第二种方法:每次求出high应该在列表中的位置,然后不断递归遍历
原文地址:https://www.cnblogs.com/an-wl/p/12518979.html