STL sort排序方法详解
2010-01-20 21:02
549 查看
#include<algorithm>
//快速排序sort() (平均O(NlogN)
//稳定排序stable_sort() (最好O(NlogN),最坏O(N(logN)^2) 用法与sort()相同
//堆排序s ort_heap() (O(NlogN)) 用法同sort(),要先make_heap()或push_heap()
************目录************
用法一:内置类型的由小到大排序:使用默认比较函数(less<T>())
sort(a,a+len); //a:数组名,len:数组长度=sizeof(arrray)/sizeof(*array)
用法二:内置类型的由大到小排序:使用内置比较函数(greater<T>())
sort(a,a+len,greater<int>()); //greater<Type>():#include<functional>
用法三:自定义类型对象数组的由大到小排序:使用游离比较函数(myGreater(Type&, Type&)
bool myGreater(Type& a, Type& b){ return a>b;}
sort(a,a+len,myGreater); //自定义类型对象数组的由大到小排序
堆排序版本:
bool myGreater(Type& a, Type& b){ return a>b;}
make_heap(a,a+len,myGreater);
sort_heap(a,a+len,myGreater); //参数必须完全一样!
用法四:指针数组的由大到小排序:使用游离比较函数(myGreater(Type*, Type*)
bool myGreater(int* a, int* b){ return *a>*b;}
sort(p,p+len,myGreater); //指针数组的由大到小排序,适用于索引排序
/**/
//***********例子************
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
//用法一:内置类型的由小到大排序:使用默认比较函数(less<T>())
/*void main()
{
int a[]={3, 1,4,2,5};
int len=sizeof(a)/sizeof(int);
sort(a,a+len); //默认:内置类型的由小到大排序
for (int i=0; i<len; i++)
cout<<a[i]<<'/t';
cout<<endl;
}
/**/
//用法二:内置类型的由大到小排序:使用内置比较函数(greater<T>())
/*void main()
{
int a[]={3, 1,4,2,5};
int len=sizeof(a)/sizeof(int);
sort(a,a+len,greater<int>()); //内置类型的由大到小排序
for (int i=0; i<len; i++)
cout<<a[i]<<'/t';
cout<<endl;
}
/**/
//用法三:自定义类型对象数组的由大到小排序:使用游离比较函数(myGreater(Type&, Type&)
/*bool myGreater(int& a, int& b){ return a>b;}
void main()
{
int a[]={3, 1,4,2,5};
int len=sizeof(a)/sizeof(int);
sort(a,a+len,myGreater); //自定义类型的由大到小排序
for (int i=0; i<len; i++)
cout<<a[i]<<'/t';
cout<<endl;
}
/**/
//sort_heap版本:
bool myGreater(int& a, int& b){ return a>b;}
void main()
{
int a[]={3, 1,4,2,5};
int len=sizeof(a)/sizeof(int);
make_heap(a,a+len,myGreater);
sort_heap(a,a+len,myGreater); //自定义类型的由大到小排序
for (int i=0; i<len; i++)
cout<<a[i]<<'/t';
cout<<endl;
}
/**/
//用法四:自定义类型指针数组的由大到小排序:使用游离比较函数(myGreater(Type&, Type&)
/*bool myGreater(int* a, int* b){ return *a>*b;}
void main()
{
int a[]={3, 1,4,2,5};
int* p[5];
for(int i=0;i<5;i++) p[i]=&a[i];
int len=sizeof(a)/sizeof(int);
sort(p,p+len,myGreater); //自定义类型的由大到小排序
for (i=0; i<len; i++)
cout<<a[i]<<'/t';
cout<<endl;
for (i=0; i<len; i++)
cout<<*p[i]<<'/t';
cout<<endl;
}
/**/
//快速排序sort() (平均O(NlogN)
//稳定排序stable_sort() (最好O(NlogN),最坏O(N(logN)^2) 用法与sort()相同
//堆排序s ort_heap() (O(NlogN)) 用法同sort(),要先make_heap()或push_heap()
************目录************
用法一:内置类型的由小到大排序:使用默认比较函数(less<T>())
sort(a,a+len); //a:数组名,len:数组长度=sizeof(arrray)/sizeof(*array)
用法二:内置类型的由大到小排序:使用内置比较函数(greater<T>())
sort(a,a+len,greater<int>()); //greater<Type>():#include<functional>
用法三:自定义类型对象数组的由大到小排序:使用游离比较函数(myGreater(Type&, Type&)
bool myGreater(Type& a, Type& b){ return a>b;}
sort(a,a+len,myGreater); //自定义类型对象数组的由大到小排序
堆排序版本:
bool myGreater(Type& a, Type& b){ return a>b;}
make_heap(a,a+len,myGreater);
sort_heap(a,a+len,myGreater); //参数必须完全一样!
用法四:指针数组的由大到小排序:使用游离比较函数(myGreater(Type*, Type*)
bool myGreater(int* a, int* b){ return *a>*b;}
sort(p,p+len,myGreater); //指针数组的由大到小排序,适用于索引排序
/**/
//***********例子************
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
//用法一:内置类型的由小到大排序:使用默认比较函数(less<T>())
/*void main()
{
int a[]={3, 1,4,2,5};
int len=sizeof(a)/sizeof(int);
sort(a,a+len); //默认:内置类型的由小到大排序
for (int i=0; i<len; i++)
cout<<a[i]<<'/t';
cout<<endl;
}
/**/
//用法二:内置类型的由大到小排序:使用内置比较函数(greater<T>())
/*void main()
{
int a[]={3, 1,4,2,5};
int len=sizeof(a)/sizeof(int);
sort(a,a+len,greater<int>()); //内置类型的由大到小排序
for (int i=0; i<len; i++)
cout<<a[i]<<'/t';
cout<<endl;
}
/**/
//用法三:自定义类型对象数组的由大到小排序:使用游离比较函数(myGreater(Type&, Type&)
/*bool myGreater(int& a, int& b){ return a>b;}
void main()
{
int a[]={3, 1,4,2,5};
int len=sizeof(a)/sizeof(int);
sort(a,a+len,myGreater); //自定义类型的由大到小排序
for (int i=0; i<len; i++)
cout<<a[i]<<'/t';
cout<<endl;
}
/**/
//sort_heap版本:
bool myGreater(int& a, int& b){ return a>b;}
void main()
{
int a[]={3, 1,4,2,5};
int len=sizeof(a)/sizeof(int);
make_heap(a,a+len,myGreater);
sort_heap(a,a+len,myGreater); //自定义类型的由大到小排序
for (int i=0; i<len; i++)
cout<<a[i]<<'/t';
cout<<endl;
}
/**/
//用法四:自定义类型指针数组的由大到小排序:使用游离比较函数(myGreater(Type&, Type&)
/*bool myGreater(int* a, int* b){ return *a>*b;}
void main()
{
int a[]={3, 1,4,2,5};
int* p[5];
for(int i=0;i<5;i++) p[i]=&a[i];
int len=sizeof(a)/sizeof(int);
sort(p,p+len,myGreater); //自定义类型的由大到小排序
for (i=0; i<len; i++)
cout<<a[i]<<'/t';
cout<<endl;
for (i=0; i<len; i++)
cout<<*p[i]<<'/t';
cout<<endl;
}
/**/
相关文章推荐
- TableSort.js表格排序插件使用方法详解
- STL中容器list的sort方法详解
- Java排序方法sort的使用详解
- JavaScript数组排序reverse()和sort()方法详解
- 常见排序的原理和C++实现(一)——STL库中sort的使用方法
- STL 中 sort()函数用法详解—— 排序
- JavaScript中数组Array.sort()排序方法详解
- 基于js 各种排序方法和sort方法的区别(详解)
- Python 列表排序方法reverse、sort、sorted详解
- Python 列表排序方法reverse、sort、sorted详解
- python 列表排序方法reverse、sort、sorted详解
- Python 列表排序方法reverse、sort、sorted详解
- jquery.tableSort.js表格排序插件使用方法详解
- 设计模式 - 模板方法模式(template method pattern) 排序(sort) 详解
- Java排序方法sort用法详解
- Java排序方法sort的使用详解
- Python 列表排序方法reverse、sort、sorted详解
- STL sort 函数实现详解 作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现。以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的
- C++ STL中sort方法对自定义类的排序
- Python 列表排序方法reverse、sort、sorted详解