• 快速排序


    思路1: 将数字第一个拿出来,然后从右边往左边找第一个比基准值小的挪到左边,同理挪动左边的

    def q_sort(arr, left, right):
        if left >=  right:
            return  arr
    
        temp = arr[left]
        i = left
        j = right
    
        while(i < j ):
            while(i < j and arr[j] >= temp):
                j = j -1
    
            arr[i] = arr[j]
    
            while (i < j and arr[i] <= temp):
                i = i + 1
    
            arr[j] = arr[i]
    
        arr[i] = temp
        q_sort(arr, left, i - 1)
        q_sort(arr, i + 1, right)
    

      思路二:

    将数字第一个挪出来 作为基准值,从数组第二个位置开始遍历,同时开始计数比基准值小的数量,将比基准值小的挪动到累加计数位置,最后置换第一个基准值和最后一个计数位置,这样小的数全在左边,大的全在右边(JDK自带的快速排序为第二种写法)

    def q_sort3(arr, left, right):
        if left >= right:
            return arr
    
        index = left
    
        for i in range(left + 1, right + 1):
            if  arr[left] >= arr[i]  :
                index = index + 1
                arr[index], arr[i] = arr[i], arr[index]
    
        arr[left], arr[index] = arr[index], arr[left]
        q_sort3(arr, left, index -1)
        q_sort3(arr, index + 1 , right)
    

      

  • 相关阅读:
    rqnoj71 拔河比赛
    NOI2002 洛谷 P1196 银河英雄传说
    sdibt 1244 烦人的幻灯片
    POJ 1273 Drainage Ditches -dinic
    NOIP2005提高组 过河
    OpenJudge 7627 鸡蛋的硬度
    Openjudge 8782 乘积最大
    OpenJudge 7624 山区建小学
    UVa 1328 Period
    UVa 11384 Help is needed for Dexter
  • 原文地址:https://www.cnblogs.com/chengxin1982/p/14839021.html
Copyright © 2020-2023  润新知