zoukankan      html  css  js  c++  java
  • 排序-快速

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

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

    然后递归调用该方法,从而实现最终的整个列表排序。
    中间值(该值每次假设是列表中的首个位置的值(注意其是变化的))
    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应该在列表中的位置,然后不断递归遍历
  • 相关阅读:
    Python 字符串和list的功能翻译
    python .strip()
    python 查看对象功能
    python 字典
    洛谷 P1144 最短路计数 Label:水
    心疼自己,再见
    初赛复习 //附复习资料
    51Nod 1079 中国剩余定理 Label:数论
    转载 乘法逆元
    51Nod 1136 欧拉函数 Label:数论
  • 原文地址:https://www.cnblogs.com/an-wl/p/12518979.html
Copyright © 2011-2022 走看看