#include <stdio.h> void QuickSort1(int *s,int left,int right) { int i,j,t,pivot; if(left>right) return; if(left<right) { pivot = s[left]; //基准数 i=left; j=right; while(i!=j) { while(i<j &&s[j]>=pivot) j--; //从右向左找第一个比基准数小的数 while(i<j &&s[i]<=pivot) i++; //从左向右找第一个比基准数大的数 if(i<j) //交换两数 { t=s[i]; s[i]=s[j]; s[j]=t; } } s[left] = s[i]; //基准数归位 s[i] = pivot; QuickSort1(s,left,i-1); QuickSort1(s,i+1,right); } } void QuickSort2(int *s,int left,int right) { int i,j,pivot; if(left>right) return; if(left<right) { pivot = s[left]; //基准数 i=left; j=right; while(i!=j) { while(i<j &&s[j]>=pivot) j--; //从右向左找第一个比基准数小的数 if(i<j) { s[i]=s[j]; i++; } while(i<j &&s[i]<=pivot) i++; //从左向右找第一个比基准数大的数 if(i<j) { s[j]=s[i]; j--; } } s[i] = pivot; //基准数归位 QuickSort2(s,left,i-1); QuickSort2(s,i+1,right); } } int main() { int a[] = {8,6,12,10,2,7,3,15,9,20}; //QuickSort1(a,0,9); QuickSort1(a,0,9); int i=0; for(;i<10;i++) printf("%d ",a[i]); return 0; }
原文:http://blog.csdn.net/huolang_vip/article/details/43546921