算法導論-快速排序算法

對於A數組,分解成A[p…r]-> A[p…q-1] A[P] A[q+1…r]
僞代碼:

QUICKSORT(A,p,r)
if p<r:
	q=PARTITION(A,p,r)
	QUICKSORT(A,p,q-1)
	QUICKSORT(A,q+1,r)
PAETITION(A,p,r)
x = A[r]
i = p -1
for j=p to r-1:
	if A[j] <= x
		i = i + 1
		exchange A[i] with A[j]
exchange A[i+1] with A[r]
return i+1
public class P_quicksort {

    private static int GetBestI(int[] a,int left,int right){
        int x = a[right];
        int i = left-1;
        for(int j = left ;j <= right -1 ;j ++){
            if (a[j] <= x){
                i++;
                int temp = a[j];
                a[j] = a[i];
                a[i] = temp;
            }
        }
        int temp = a[i+1];
        a[i+1] = a[right];
        a[right] = temp;
        return i+1;
    }
    public static void Quicksort(int[] a,int left,int right){
        if (left<right){
            int q = GetBestI(a,left,right);
            Quicksort(a,left,q-1);
            Quicksort(a,q+1,right);
        }
    }
    public static void main(String[] args){
        P_quicksort quick = new P_quicksort();
        int [] a = {10,9,8,6,5,4,3,2,1};
        Quicksort(a,0,a.length-1);

        for(int i=0;i<a.length;i++){
            System.out.println(a[i]);
        }
    }
}

C++實現

//
//  QuicksortTest.cpp
//  algorithm
//
//  Created by mac on 2019/9/15.
//  Copyright © 2019 Mao. All rights reserved.
//

#include <stdio.h>
#include<iostream>

using namespace std;

int getBestI(int a[],int left,int right){
    int X = a[right];
    //int M = left - 1;
    int i = left - 1;
    for(int j = left;j<=right-1;j++){
        if(a[j] <= X){
            i++;
            swap(a[j], a[i]);
        }
    }
    swap(a[i+1], a[right]);
    return i+1;
}

void Quicksort(int a[],int left,int right){
    if (left<right){
        int q =getBestI(a,left,right);
        Quicksort(a, left, q-1);
        Quicksort(a, q+1, right);
    }
}

int main(){
    int a[] = {10,9,8,7,6,5,4,3,2,1};
    Quicksort(a, 0, 10);
    for(int i = 0;i<10;i++){
        cout<<a[i]<<"\t";
    }
    cout<<endl;
    return 0;
}

推導過程
在這裏插入圖片描述
效果
java
在這裏插入圖片描述
c++
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章