码迷,mamicode.com
首页 > 编程语言 > 详细

排序-快速

时间:2020-03-18 18:34:02      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:指针变量   map   name   data   compare   输入   完成   逗号   main   

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

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

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

 



排序-快速

标签:指针变量   map   name   data   compare   输入   完成   逗号   main   

原文地址:https://www.cnblogs.com/an-wl/p/12518979.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!