C++中sort()及qsort()

sort函数:其实sort()并不能叫做快速排序,而应该说成智能排序;它正常情况下,会使用快排,但是发现快排恶化的话,会自动调整成其他排序来辅助。是最高效的排序。在C++的algorithm库中。

sort(begin,end); 
/*在[begin, end]中的元素进行排序按升序排列 
sort()默认是按升序排序,如果要按降序排序,还需自己编写一个比较函数来实现 */

eg:

int _main()
{
    int a[20],i;
    for(i=0;i<20;i++)
         cin>>a[i];
    sort(a,a+20);  //按升序排序
    for(i=0;i<20;i++)
    cout<<a[i]<<endl;
    return 0;
}

排序是升序的,那如果要降序的该怎么办呢?下面给出自己编写比较函数来实现的代码:

int cmp(int a,int b)
{
      return a<b;   //升序排列;改为return a>b,则为降序
  
}
  
int main()
{
     int a[20],i;
     for(i=0;i<20;i++)
       cin>>a[i];
     sort(a,a+20,cmp);
     for(i=0;i<20;i++)
       cout<<a[i]<<endl;
     return 0;
}

qsort(quicksort)根据你给的比较函数给一个数组快速排序,是通过指针移动实现排序功能。排序之后的结果仍然放在原来数组中。

qsort和compare的用法如下:

void qsort( void *base, size_len, size_data, int compare);

int compare (const void *elem1, const void *elem2 ) ;
int compare(const void *a , const void *b )

{
  return *(int *)a - *(int *)b;  //升序排序

//return *(int *)b - *(int *)a; //降序排序

}

上面是对int型的排序,如果是字符型,就把int换为char。而double型的为下:

int cmp(const void*a,const void*b)
{
    return *(double*)a>*(double*)b?1:-1;//升序

  //return *(double*)b>*(double*)a?1:-1; 降序
}
发布了276 篇原创文章 · 获赞 30 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42905141/article/details/103687909