快速排序算法

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);
  }
}

 

posted @ 2012-05-10 17:06  陈小怪  阅读(174)  评论(0编辑  收藏  举报