快速排序(python和c++实现)

python实现:

#快速排序法
#交换a[i]和a[j]
def exchange(a,i,j):
    p=a[i]
    a[i]=a[j]
    a[j]=p
"""分割数组a[],以(high是最后一个元素下标,
    low是第一个下标一般为0)
    x=a[high]为标尺,a[i+2,high]>=x,a[low,i]<=x

"""
def Partition(a,head,tail):
    x=a[tail]
    i=head-1
    for j in range(head,tail):
        if(a[j]<=x):
            i=i+1
            exchange(a,i,j)
    exchange(a,i+1,tail)
    return i+1

'''
递归快排

'''
def QuickSort(a,head,tail):
    if (head<tail):
        q=Partition(a,head,tail)
        QuickSort(a,head,q-1)
        QuickSort(a,q+1,tail)
"""
选择第k小的元素
"""
def Select(a,head,tail,k):
    var=1
    while(var==1):
        q=Partition(a,head,tail)
        if(k==q+1):
            return a[q]
        elif(k<q+1):
            tail=q-1
        else:
            head=q+1
    
if __name__ == "__main__":
    a=[66,22,55,11,33,11,22,44,556,7788,4356,332,1,4]
    #print(Partition(a,0,13))
    QuickSort(a,0,13)
    print(a)
    k=10
    print("第%d小的元素是:"%(k))
    print(Select(a,0,13,k))

C++实现:

#include <iostream>
using namespace std;

template <typename Type>
int Partition(Type a[],int m,int p) {
    Type x = a[p];
    int i = m - 1;
    for (int j = m; j <= p - 1; j++) {
        if (a[j] <= x) {
            i = i + 1;
            Interchange(a, i, j);
        }
    }
    Interchange(a, i + 1, p);
    return i + 1;
}

template <typename Type>
void Interchange(Type a[],int i,int j) {
    Type p = a[i];
    a[i] = a[j];
    a[j] = p;
}

template <typename Type>
void QuickSort(Type a[],int m,int p) {
    if (m < p) {
        int q = Partition(a, m, p);
        QuickSort(a, m, q - 1);
        QuickSort(a, q + 1, p);
    }
}

int main() {
    int b = 0;
    int a[10] = { 65,70,32,75,80,85,60,55,50,45 };
    QuickSort(a, 0, 9);
    for (int i = 0; i < 10; i++) {
        cout << a[i] << " ";
    }
    cin >> b;
}

猜你喜欢

转载自blog.csdn.net/SteveForever/article/details/81193364