排序和二分查找(Python)

目录

[排序]

归并排序

快速排序:

插入排序:

冒泡排序

选择排序

相关练习:

[查找]

二分查找:

模糊二分查找:

相关练习


[排序]

归并排序

#归并
def mSort(nums): #分为两个列表,分别排序
    if len(nums)<=1:
        return nums
    else:
        m = len(nums)//2
        print 'len(nums): ',len(nums)
        print 'nums: ',nums
        print 'm: ',m
        left = mSort(nums[:m])
        right = mSort(nums[m:])
        ret = merge(left,right)
        return ret

def merge(left,right):#合并两个列表
    i = 0
    j = 0
    k = 0
    ret =[]
    print '--------'
    print 'left: ',left
    print 'right: ',right
    while i<len(left) and j< len(right):
        if left[i]<right[j]:
            ret.append(left[i])
            i += 1
        else:
            ret.append(right[j])
            j += 1
    ret += left[i:]
    ret += right[j:]
    return ret

快速排序:

#快排、
def quickSort(nums):
    qSort(nums,0,len(nums)-1)

def qSort(nums,low,high):
    if low<high:
        pivot = partition(nums,low,high)
        qSort(nums,low,pivot-1)#低位排序
        qSort(nums,pivot+1,high)#高位排序
        
def partition(nums,low,high):#枢纽点
    pivotkey = nums[low]
    while low<high:
        while low<high and nums[high]>=pivotkey:
            high -= 1
        nums[low],nums[high] = nums[high],nums[low]
        
        while low<high and nums[low]<=pivotkey:
            low += 1
        nums[low],nums[high] = nums[high],nums[low]
    return low
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值