快速排序

//快排
#include<iostream>
#include<cstdio>
using namespace std;
int Partition(int r[],int low,int high)
{
int i=low,j=high,pivot=r[low];//选定基准量为数组的第一个数;
while(i<j)//
{
while(i<j&&r[j]>pivot) j--;//从左往右扫描; 判断左半部分是否都比基准量大 如果不是 停下来
if(i<j)  //如果i,j还没有碰头(还没越界)
 swap(r[i++],r[j]);//i++:先运算然后再加;交换目前左半部分比基准量小的数和基准量;
 //因为r[j]左边的数都比基准量大   
while(i<j&&r[i]<pivot) i++;//从右往左扫描; 判断右半部分是否都比基准量小 如果不是 停下来
if(i<j) //如果i,j还没有碰头(还没越界)
 swap(r[i],r[j--]);//交换目前右半部分比基准量大的数和基准量;
 //因为r[i]右边的数都比基准量小
}return i;
}
void QuickSort(int R[],int low,int high)   //递归
{
int mid;
if(low<high)
{
mid=Partition(R,low,high);/*不停的分解数组,先分成1/2,左比右大  左右再分别找基准量,
再比较,不能再分就已经排好序了*/
QuickSort(R,low,mid-1);
QuickSort(R,mid+1,high);
}
}
int main()
{
int a[1000];
int i,N;//N是数据的个数;
cin>>N;
for(int i=0;i<N;i++)
 cin>>a[i];
QuickSort(a,0,N-1);
for(int i=0;i<N;i++)
cout<<a[i]<<" ";
return 0;
}
posted @ 2021-02-17 21:06  -Sky-  阅读(21)  评论(0编辑  收藏  举报