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

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

 

Posted by 超级苍蝇 on Oct 7, 2005 in 随风~ |

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;

原文地址:https://www.cnblogs.com/gaotaozhaolei/p/1701495.html