对于一个给定的数组,从中选择一个元素(叫作分区元素),并把其余元素划分成两个子集合--一个是由所有小于分区元素的元素组成的子集合,另一个是由所有大于等于分区元素的元素组成的子集合。对这样两个自己和递归应用同一过程。当某个子集合中的元素数小于两个时,这个子集合不需要再排序,故递归停止。

 

/*qsort: 以递增顺序对v[left],,,v[right]进行排序*/
void qsort(int v[],int left,int right)
{
             int i,last;
             void swap(int v[],int i,int j);
             if (left>=right)  /*若数组所包含的元素数少于两个,则什么也不做*/
                 return;
             swap(v, left ,(left+right)/2); /*吧分区元素移到v[0]*/
             last=left; 
             for (i=left+1;i<=right;i++)  /*分区*/
                  if (v[i]<v[left])
                          swap(v,++last,i);
             swap(v,left,last); /*恢复分区元素,‘不确定 right 是否换成 last’*/
             qsort(v,left,last-1);
             qsort(v,last+1,right);
}

/*swap: 交换v[i]和v[j]的值*/
void swap (intv[],int i,int j)
{
               int temp;
               temp=v[i];
               v[i]=v[j];
               v[j]=temp;
}

 

posted on 2013-06-14 11:00  欧小弟  阅读(139)  评论(0编辑  收藏  举报