快速排序(分治法)

来源:互联网 发布:ajaxupload3.9.js下载 编辑:程序博客网 时间:2024/06/05 11:39
//快速排序//PARTITION 函数对数组进行划分,选择A[end]值作为主元,start到i的值小于A[end],i+1到end-1的值大于A[end],最后将i+1和end处的值交换,实现数组的划分#include <iostream>using namespace std;int PARTITION(int A[],int start,int end){    int mid_value;    mid_value=A[end];    int i=start-1;    for(int j=start;j<end;j++)    {        if(A[j]<=mid_value)        {            i++;            int temp_1=A[i]; A[i]=A[j]; A[j]=temp_1;   //交换A[i]和A[j]        }    }    int temp_2=A[i+1]; A[i+1]=A[end]; A[end]=temp_2;    return i+1;}void QUICK_SORT(int A[],int start,int end){    if(start<end)    {        int mid;        mid=PARTITION(A,start,end);        QUICK_SORT(A,start,mid-1);        QUICK_SORT(A,mid+1,end);    }}int main(int argc, char *argv[]){    int n;    cin>>n;    int a[n];    for(int i=0;i<n;i++) cin>>a[i];    QUICK_SORT(a,0,n-1);    for(int i=0;i<n;i++)    {        cout<<a[i]<<" ";    }    cout<<endl;    cout << "Hello World!" << endl;    return 0;}