快速排序

来源:互联网 发布:淘宝店卖女装的占多少 编辑:程序博客网 时间:2024/05/17 01:21

【1】单向扫描


PARTITION(A, p, r)
    x ← A[r]         //以最后一个元素,A[r]为主元
    i ← p - 1
    for j ← p to r - 1    //注,j从p指向的是r-1,不是r。
        do if A[j] < x
              then i ← i + 1
                      exchange A[i] <-> A[j]
    exchange A[i + 1] <-> A[r]
    return i + 1


【2】双向替换(右小左大直接交换)

PARTITION(A, p, r)

    x ← A[p]

   i ← p - 1

    j ← r + 1

    while TRUE

        do repeat  j ← j - 1    //找小

                  until  A[j] < x

        do repeat  i ← i + 1    //找大

                  until  A[i] > x

             if i < j

                  then exchange A[i] <-> A[j]

             else return j

【3】双向补缺(左右轮流补空:首为轴,小补左,大补右)