首页 新闻 搜索 专区 学院

关于qsort

0
悬赏园豆:10 [已解决问题] 解决于 2011-01-05 21:35

我们可以调用系统函数来实现快速排序,程序如下:

#include<stdio.h>

#include<stdlib.h>

 

int comp(constvoid *a,const void *b)

{

   return *(int *)b-*(int *)a;  

}

 

int main()

{

   int i;

   int a[10]={1,2,3,6,5,4,7,9,8,0};

   qsort(a,10,sizeof(a[0]),comp);

   for(i=0;i<10;i++)

  printf("%d ",a[i]);

}

 

我的问题是:qsort()的参数中,comp是比较函数,在这个函数内部是怎么起作用的呢?

lzjnhs的主页 lzjnhs | 初学一级 | 园豆:60
提问于:2010-12-12 20:39
< >
分享
最佳答案
0

首先, 

所有排序都是要 经过元素的比较, 然后进行位置交换, 来把元素排成有序的. 所以任何排序的基本思想都包含比较函数了. 

再者,

qsort用的是快排变种.

快排基本思路如下:

5, 4, 7, 2, 3, 8

1. 随机找中值,假设抽到7

2. 以7为中值,大体思路:小于7的放左边,大于7的放右边,  把数组划分为两列( 这里就要用比较了)   [3,4,5,2],7,[8]

3. 左右两列用同样方法,继续分. 到最后各列都为1,2个元素时, 数组就有序了。

所以比较每个元素进行排序,必须要比较。

收获园豆:5
oleeceo | 菜鸟二级 |园豆:210 | 2010-12-21 21:10
其他回答(1)
0

void qsort(...)

{

  ....

    if(comp(a[i],a[j]){

        swap(...);  

   }

   ....

}

应该是这样调用的吧。

收获园豆:5
yearN | 园豆:551 (小虾三级) | 2010-12-13 12:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册