• 排序-快速


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

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

    然后递归调用该方法,从而实现最终的整个列表排序。
    中间值(该值每次假设是列表中的首个位置的值(注意其是变化的))
    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应该在列表中的位置,然后不断递归遍历
  • 相关阅读:
    android通过Canvas和Paint截取无锯齿圆形图片
    【转】mysql的cardinality异常,导致索引不可用
    mysql索引无效且sending data耗时巨大原因分析
    linux shell脚本通过参数名传递参数值
    git日志输出格式及两个版本之间差异列表
    jenkins结合ansible用shell实现自动化部署和回滚
    Linux下cp -rf总是提示覆盖的解决办法
    jenkins集成ansible注意事项Failed to connect to the host via ssh.
    ansible操作远程服务器报Error: ansible requires the stdlib json or simplejson module, neither was found!
    利用ssh-copy-id无需密码登录远程服务器
  • 原文地址:https://www.cnblogs.com/an-wl/p/12518979.html
Copyright © 2020-2023  润新知