您的位置:首页 > 编程语言 > C语言/C++

C++可直接使用的排序函数:qsort(),sort()

2010-03-31 15:52 211 查看

C++ 可直接使用的排序函数:qsort(),sort()

Posted by 超级苍蝇 on Oct 7, 2005 in 随风~ | Subscribe qsort() 和 sort()

(wysuperfly原创 v1.1)

//基于c++描述 <<将标准 C++ 视为一个新语言>>

使用C++编译器(VC6,G++等)可以使用STL里的sort()函数或者CRT中的 qsort()来排序,这么好的函数我居然才知道,真是孤陋阿~总算摆脱整天冒泡的日子了~~~
[注] qsort () 可在任何C/C++编译器里使用。
而sort()函数是标准模板库的的函数可在C++编译器里使用。

赫赫,介绍一下:

使用
#include <iostream>
using namespace std;
开头的,可以直接使用这2个函数,而不用额外包含其他头文件。

qsort()

.

.

应该就是用的快排。貌似是以数据块的方式移动数据,速度较快。

原型:
_CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*));

解 释: qsort ( 数组名 ,元素个数,元素占用的空间(sizeof),比较函数)
比较函数是一个自己写的函 数 遵循 int com(const void *a,const void *b) 的格式。
当a b关系为 > < = 时,分别返回正值 负值 零 (或者相反)。
使用a b 时要强制转换类型,从void * 转换回应有的类型后,进行操作。
数组下 标从零开始,个数为N, 下标0-(n-1)。

示例:

int nn[100],n=100;
int com(const void *a,const void *b)
{
return *(int*)a-*(int*)b;
}

qsort((void *)nn,n,sizeof(int),com);

相关:

为什麽你必须给予元素个数?(因为阵列不知道它自己有多少个元素)为什麽你必须给予 double 的大小?(因为 qsort 不知道它要排序的单位是 doubles.)为什麽你必须写那个丑陋的、用来比较 doubles 数值的函式?(因为 qsort 需要一个指标指向某个函式,因为它不知道它所要排序的元素型别)为什麽 qsort 所使用的比较函式接受的是 const void* 引数而不是 char* 引数?(因为 qsort 可以对非字串的数值排序)Bjarne Stroustrup

sort()

.

.

sort()函数是标准模板库的的函数,已经进行了优化,根据情况的不同可以采用不同的算法,所以较快。

在同样的元素和同样的比较条件下,sort()的执行速度都比qsort()要快。另外,sort()是类属函数,可以用于比较任何容器,任何元 素,任何条件。

stl_algo.h 里面找到的:
template<typename _RandomAccessIterator>
void
__insertion_sort(_RandomAccessIterator __first, _RandomAccessIterator __last)

只要开始和结束的地址就可以了。模板可以直接使用很多类型。

示例:

1:上面的程序:
sort(nn,nn+n);即可。

2:比较方 便的字符串排序:

char ch[20]="sdasdacsdasdas\0";
cout<<ch<<endl;
sort(ch,ch+14);
cout<<ch<<endl;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: