首页 > 代码库 > 快速排序

快速排序

#include<iostream>
#include<algorithm>
#include<map>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<string>
#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
using namespace std;
int n, a[55];
int i ,j , t;
void quicksort(int left,int right){
    t= 0;
    if(left >= right)
       return;                 //若左标与右标相等,退出本轮;
    t= a[left];                //设置标的为t,并初始化
    i= left;                  //设i,j为左右开始的游标
    j= right;
    while(i<j){
while( a[j]>= t&&i<j ){ j--;                //从右开始,直到找到一个数比标的小,结束 } if(i < j) a[i++] = a[j]; while( a[i]< t&& i<j){ i++; } if(i<j){ a[j--] = a[i]; } } a[i] = t; quicksort(left,i-1);        //分治思想 quicksort(i+1,right); } int main() { cin>>n; for(i = 1; i<=n; i++ ){ cin>>a[i]; } quicksort(1, n) ; for( i= 1; i<=n; i++ ){ cout<<a[i]; } cout<<endl; }

 

#include<iostream>#include<algorithm>#include<map>#include<stack>#include<queue>#include<vector>#include<set>#include<string>#include<cstdio>#include<cstring>#include<cctype>#include<cmath>using namespace std;int n, a[55];int i ,j , t;void quicksort(int left,int right){    t= 0;    if(left >= right)       return;    t= a[left];    i= left;    j= right;    while(i<j){        while( a[j]>= t&&i<j ){            j--;        }        if(i < j)            a[i++] = a[j];
        while( a[i]< t&& i<j){            i++;        }        if(i<j){            a[j--] = a[i];        }    }            a[i] = t;            quicksort(left,i-1);            quicksort(i+1,right);}int main(){    cin>>n;    for(i = 1; i<=n; i++ ){        cin>>a[i];    }    quicksort(1, n) ;    for( i= 1; i<=n; i++ ){        cout<<a[i];    }    cout<<endl;}

 

快速排序