快速排序算法

一.简介

二.C语言版本

//C语言版本
void sort(int* a,int left,int right){
    

    if(left>=right){
        return;
    }

    int i=left;
    int j=right;
    int key=a[left];

    while(i<j){
        while(i<j && key<=a[j]){
            j--;
        }
        a[i]=a[j];
    
        while(i<j && key>=a[i]){
            i++;
        }
        a[j]=a[i];
    }

    a[i]=key;
    sort(a,left,i-1);
    sort(a,i+1,right);
}

二.C++版本

//C++版本

#include <iostream>

using namespace std;

void Qsort(int arr[],int low,int high){
    
    if(high<=low)
        return;

    int i=low;
    int j=high+1;
    int key=arr[low];

    while(true){
        
        //从左向右找比key大的值
        while(arr[++i]<key){
            if(i==high){
                break;
            }
        }

        //从右向左找比key小的值
        while(arr[--j]>key){
            if(j==low){
                break;
            }
        }

        if(i>=j)
            break;

        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }

    int temp=arr[low];
    arr[low]=arr[j];
    arr[j]=temp;
    Qsort(arr,low,j-1);
    Qsort(arr,j+1,high);
}

int main(){
    int a[]={57,68,59,52,72,28,96,33,24};
    Qsort(a,0,sizeof(a)/sizeof(a[0])-1);
    
    for(int i=0;i<sizeof(a)/sizeof(a[0]);i++){
        cout<<a[i]<<"";
    }
    
    return 0;
}
原文地址:https://www.cnblogs.com/k5bg/p/11064637.html