打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
qsort和sort
qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n)
功 能: 使用快速排序例程进行排序
头文件:stdlib.h
用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
参数: 1 待排序数组首地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序

注意比较函数的格式int (*fcmp)(const void *,const void *)
返回值为int,参数为const void*
基于int型数组排序:
int compare(const void* arg1,const void* arg2)
{
 return *(int*)arg1-*(int*)arg2;
}
基于char型数组:

int compare(const void* arg1,const void* arg2)
{
 return *(char*)arg1-*(char*)arg2;
}
基于double型数组:
int compare(const void* arg1,const void* arg2)
{
 return (*(double*)arg1>*(double*)arg2)?1:-1;
}

 
基于字符串数组:
int compare(const void* arg1,const void* arg2)
{
 return strcmp((char*)arg1,(char*)arg2);
}

sort函数是c++中标准模板库的的函数,在qsort()上已经进行了优化,根据情况的不同可以采用不同的算法,所以较快。在同样的元素较多和同样的比较条件下,sort()的执行速度都比qsort()要快。另外,sort()是类属函数,可以用于比较任何容器,任何元素,任何条件。使用时需调用#include<algorithm> using namespace std;

这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。

 
如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。比较函数是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。想把刚才的整数数组按降序排列,可以先定义一个比较函数cmp

bool cmp(int a,int b)
{
    return a>b;
}
   排序的时候就写sort(a,a+100,cmp);

 
自定义类型:重载()参数格式为const int&

class myless
{

public:
  bool operator()( const int &a, const int &b) {
    return a < b;
  }
};

int main(int argc, char* argv[])
{
 vector<int> vec;
 vector<int>::iterator i;
 
 vec.push_back (10);
 vec.push_back (3);
 vec.push_back (7);
 sort(vec.begin(), vec.end(), myless()); // Sort the vector

 for (i = vec.begin(); i != vec.end(); i++)
 {
  cout<<*i<<endl;
 }

 return 0;
}



 

 
 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C++ STL编程轻松入门03
qsort函数应用大全
qsort函数用法[转]
C语言使用stdlib.h库函数的二分查找和快速排序的实现代码
浅析C/C++中sort函数的用法
qsort函数、sort函数 (精心整理篇)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服