STL--qsort用法(转)

C++,STL泛型都定义在std命名空间中,所以,必须在头文件声明的最后一句加上一句"using namespace std;"

#include<algorithm>

using namespace std;

需要说明的是:C++中保留着C语言的常用头文件。如果你愿意,可以继续用<stdio.h>之类以.h结尾的头文件

快速排序sort真的很强大

以为真的条件排序,前面的(a)大于后面的(b),则降序;

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;

 

sort(c++/stl)

  今天遇到一个排序问题,本来想自己写一个排序的,翻阅了一下stl,发现stl已经提供了相应的方法,而且非常好用,速度也非常快。
  #include <algorithm>
  void sort( iterator start, iterator end );
  void sort( iterator start, iterator end, StrictWeakOrdering cmp );
 
        vector<int> v; v.push_back( 23 ); 
        v.push_back( 
-1 );
        v.push_back( 
9999 );
        v.push_back( 
0 ); 
        v.push_back( 
4 );           
        cout 
<< "Before sorting: "
        
for(  i = 0; i < v.size(); i++ ) 
        
{   cout << v[i] << " "; } 
        cout 
<< endl;            
        sort( v.begin(), v.end() );         
        cout 
<< "After sorting: "
        
for(  i = 0; i < v.size(); i++ ) 
        
{   cout << v[i] << " "; } 
        cout 
<< endl; 
bool cmp( int a, int b ) 
{   return a > b; 
}
              
              
vector
<int> v; 
forint i = 0; i < 10; i++ ) 
{  
    v.push_back(i); 
}
               
cout 
<< "Before: "
forint i = 0; i < 10; i++ ) 
{   
    cout 
<< v[i] << " "
}
 
cout 
<< endl;             
sort( v.begin(), v.end(), cmp );                
cout 
<< "After: "
forint i = 0; i < 10; i++ ) 
{   
    cout 
<< v[i] << " ";
}
 
cout 
<< endl; 
posted @ 2012-02-13 13:10  nba76ers  阅读(930)  评论(0)    收藏  举报