快速排序

来源:互联网 发布:cs弹道优化脚本 编辑:程序博客网 时间:2024/06/17 02:58
#include"iostream"#include"cstdlib"using namespace std;const int MAXN = 199;int arr[MAXN];int n;void swap(int i,int j){    int t = arr[i];arr[i] = arr[j];arr[j] = t;}void quick_sort(int left,int right){    if(left>=right){        return;    }    int i=left,j=right;    int base = arr[left];    while(i!=j){            /*            从小到大排序            先从后往前找小的,然后从前往后找大的            1表示找到 0表示未找到符合的元素            j要找小于基准(s),i要找大于基准(b)            -------------            | j1 | i1   |i<j swap  ib js==>is jb            | j1 | i0   |i==>j:i=j break js:is swap(i,left)            | j0 | None |j==>i:j=i break ----> before j1 i1      is jb==>is js swap(i,left)            | j0 | None |j==>i:j=i break ----> brfore None None  j=i=left swap(left,left)<=>swap(i,left)            -------------            -------------            | i1 | j1   |i<j swap ib js ==> is jb            | i1 | j0   |j==>i:i=j break ib:jb   swap(i-1/j-1,left)            | i0 | None |i==>j:i=j break ----> before j1 i1      is jb==>ib jb swap(i-1/j-1,left)            | i0 | None |i==>j:i=j break ----> before None None  j=i=right  all small swap(right/i/j,left)            -------------            */        while(arr[j]>=base&&i<j) j--;        while(arr[i]<=base&&i<j) i++;        if(i<j){            swap(i,j);        }    }    swap(i,left);    quick_sort(left,i-1);    quick_sort(i+1,right);}int main(){    while(cin>>n){        for(int i=0;i<n;i++) arr[i]=rand();        for(int i=0;i<n;i++) cout<<arr[i]<<" ";cout<<endl;        quick_sort(0,n-1);        for(int i=0;i<n;i++) cout<<arr[i]<<" ";cout<<endl;    }}#include"iostream"#include"cstdlib"using namespace std;const int MAXN = 199;int arr[MAXN];int n;void swap(int i,int j){    int t = arr[i];arr[i] = arr[j];arr[j] = t;}int Partition(int left,int right){    int base = arr[left];    while(left<right){        while(arr[right]>=base&&right>left) right--;        arr[left]=arr[right];        while(arr[left]<=base&&right>left) left++;        arr[right]=arr[left];    }    arr[left]=base;    return left;}void quick_sort(int left,int right){    if(left<right){        int parti = Partition(left,right);        quick_sort(left,parti-1);        quick_sort(parti+1,right);    }}int main(){    while(cin>>n){        for(int i=0;i<n;i++) arr[i]=rand();        for(int i=0;i<n;i++) cout<<arr[i]<<" ";cout<<endl;        quick_sort(0,n-1);        for(int i=0;i<n;i++) cout<<arr[i]<<" ";cout<<endl;    }}

0 0
原创粉丝点击