刚开始学的时候就只会冒泡排序,后来会了C++库函数sort,就是没手写过quickSort。算算2014年也就剩下这么几天吧。不知道为啥今天就想写这个叫quickSort的东西。所以......
上代码:
#include<map> #include<cmath> #include<stack> #include<queue> #include<cctype> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; int middle(int *a,int left,int right){ int an=a[left]; //以a[left]为分界点 while(left<right){ while(left<right&&a[right]>=an) right--; //从右往左找,一直找到比分界点 an 小的数,放到左边去 a[left]=a[right]; while(left<right&&a[left]<=an) left++; //从左往右找,一直找到比分界点 an 大的数,放到右边去 a[right]=a[left]; } a[left]=an; //把分界点赋回给a[left] return left; } void quickSort(int *a,int left,int right){ if(left<right){ int mid=middle(a,left,right); quickSort(a,left,mid-1); quickSort(a,mid+1,right); } } int main(){ int n; while(scanf("%d",&n)!=EOF){ int a[100]; for(int i=0;i<n;i++) scanf("%d",&a[i]); quickSort(a,0,n-1); for(int i=0;i<n;i++) printf("%d ",a[i]); printf("\n"); }return 0; }
时间: 2024-11-25 12:00:42