Chinaunix首页 | 论坛 | 博客
  • 博客访问: 239334
  • 博文数量: 108
  • 博客积分: 3092
  • 博客等级: 中校
  • 技术积分: 1172
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-25 16:35
文章分类

全部博文(108)

文章存档

2011年(3)

2010年(43)

2009年(19)

2008年(43)

我的朋友

分类: C/C++

2008-11-02 16:27:14

1.快速排序的算法原理
对于一个给定的数组,从中选择一个元素,以该元素为界将其余元素划分为两个子集,一个子集的所有元素都小于该元素,另一个子集的元素都大于或等于该元素,对两个子集递归执行这一过程,当某个子集中的元素小于二时,这个子集就不需要再次排序,终止递归。
 
2.代码实现及测试
 
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);  //将中点的元素作为比较元素,放到整个数组的最左边
     last = left;
     for(i=left+1;i<=right;i++)
        if(v[i]           swap(v,++last,i);
     swap(v,left,last); //last位置放的将是比较元素,左边全是比它小的元素

     qsort(v,left,last-1);//对子集1进行递归调用
     qsort(v,last+1,right);//对子集2进行递归调用
}
void swap(int v[],int i,int j)
{
     int temp;
     temp=v[i];
     v[i]=v[j];
     v[j]=temp;
}
main()
{
      int k=0;
      int test[]={3,2,6,4,5,9,11,7,16,8};
      qsort(test,0,9);
      for(k=0;k<10;k++)
      {
          printf("%d,",test[k]);
      }
      printf("\n");
      getchar();
}
阅读(1034) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~