快速排序思想+实现(Goal:手写快排)
转载于:http://blog.csdn.net/morewindows/article/details/6684558
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤。因此我的对快速排序作了进一步的说明:挖坑填数+分治法
#include<cstdio> #include<cstdlib> #include<iostream> using namespace std; void quick_sort(int s[], int l, int r) { if(l<r) { int i = l, j = r; int x = s[i]; while(i<j) { while(s[j]<=x&&i<j) j--; if(i<j) s[i++]=s[j]; while(s[i]>x&&i<j) i++; if(i<j) s[j--]=s[i]; } s[i]=x; quick_sort(s,l,i-1); quick_sort(s,i+1,r); } } int main() { int n = 5; int a[n]; for(int i = 0; i < n; i++) { scanf("%d", &a[i]); } quick_sort(a,0,n-1); for(int i=0; i<n; i++) printf("%d ", a[i]); free(a); return 0; }