快速排序算法
1.基本思想
快速排序是冒泡排序的一种改进.快速排序的基本思想是,在待排序的N个记录中任取一个记录,以该记录的键值为标准,将所有记录分为3组,使得第一组中各记录的键值均小于或等于基准值,第二组只含基准值对应的一条记录,第三组中各记录的键值均大于或等于基准值.这个过程称为一趟分割.一趟分割后,基准值的位置就是该值的最终位置.然后,对所分成的第一和第三组再分别重复上述方法,直到所有记录都排在适当的位置为止.
2.分割算法
int partition(int a[],int p1,int p2) { int i,j; int x; i=p1; j=p2; x=*(a+i); while(i<j) { while(*(a+j)>=x&&i<j) j--; if(i<j) { *(a+i)=*(a+j); i++; } while(*(a+i)<x&&i<j) i++; if(i<j) { *(a+j)=*(a+i); j--; } } *(a+i)=x; return(i); }
3.快速排序递归程序
快速排序的递归实现是直接的,具体程序如下.
void sortquick(int a[],int p1,int p2) { int p; if(p1<p2) { p=partition(a,p1,p2); sortquick(a,p1,p-1); sortquick(a,p+1,p2); } }