快速排序(quick sort)

快速排序(quick sort)

1.原理

首先任意选取一个数据(通常选数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。

一轮快速排序的算法:

(1)设置两个变量i、j,排序开始的时候:i=0,j=n-1。

(2)以第一个数组元素作为关键数据,赋值给key,即key =A[0]。

(3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换(保证了要趋向于前方的关键码都小于key )。

(4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的值A[i],将A[i]和A[j]互换(保证了要趋向于后方的关键码都大于key)。

(5)重复第3、4步,直到 i=j ,完成本轮比较。

2.Python实现快速排序

# 快速排序的Python实现(quickSortdef quick_sort(nums,start,end):
    if start < end:
        i,j = start,end
        # 设置关键数据
        key = nums[i]
        while i < j:
            # 由后开始向前搜索(j--),找到第一个小于key的值nums[j],赋值给nums[i]
            while (i < j) and (nums[j] >= key):
                j=j-1
            nums[i] = nums[j]
            # 由前开始向后搜索(i++),找到第一个大于key的值nums[i],赋值给nums[j]
            while (i < j) and (nums[i] <= key):
                i = i + 1
            nums[j] = nums[i]
        # 完成第一轮比较后,列表被分成了两个半区,并且i=j
        # 把关键数据key赋值给i=j时的这个数nums[i]
        nums[i] = key
        #递归前半区
        quick_sort(nums, start, i - 1)
        #递归后半区
        quick_sort(nums, j + 1, end)
    return nums

if __name__ == '__main__':
    list1 = [77,64,89,61,97,70]
    print("快速排序后:",quick_sort(list1,0,len(list1)-1))

你可能感兴趣的:(算法学习)