python、Java 快速排序

python3快速排序


在这里插入图片描述

		#算法导论中的快排
        #理解 i:首先划分为 前段 + 后段 (这时候没有pivot)
        #i 指向 前段的最后一个元素
        #i+1 指向 后段的第一个元素
        #前段都是小于等于 pivot,后段都是大于pivot
        #一定有i<=j
        def partition(a,low,high):
            x=a[high]#轴点
            i=low-1
            for j in range(low,high):
                if a[j]<=x:
                    i+=1
                    a[i],a[j]=a[j],a[i]
            
            a[i+1],a[high]=a[high],a[i+1]
            return i+1

        def quickSort(a,low,high):
            if low < high:
                q=partition(a,low,high)
                quickSort(a,low,q-1)
                quickSort(a,q+1,high)

另外一种很好理解的写法

def quickSort(self,arr,left,right):
        if left>right:
            return
        povit=arr[left]
        i,j=left,right
        while i<j:
            while i<j and arr[j]>=povit:
                j-=1
            while i<j and arr[i]<=povit:
                i+=1
            if i<j:
            	arr[i],arr[j]=arr[j],arr[i]
        arr[left]=arr[i]
        arr[i]=povit
        
        self.quickSort(arr,left,i-1)
        self.quickSort(arr,i+1,right)

Java版本

//最简单的方法,全部加上等号
    public static void quickSort(int[] arr,int l,int r){
        //这个等号 可加 可不加
        if(l>=r) return;

        int povit = arr[l];
        int i=l,j=r;
        while(i<j){
            //上面这个等号 可加 可不加
            while(arr[j]>=povit && i<j) j--;

            //下面这个等号一定要加
            //不加会报错
            while(arr[i]<=povit && i<j) i++;

            if(i<j){
                int tmp=arr[i];
                arr[i]=arr[j];
                arr[j]=tmp;
            }
        }
        arr[l]=arr[i];
        arr[i]=povit;

        quickSort(arr,l,i-1);
        quickSort(arr,i+1,r);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值