sort()函数是C++中的排序函数其头文件为:#include<algorithm>头文件;
sort()相对于qsort()更加灵活,对基本的类型排序不需要定义排序函数
1、sort()
sort 对给定区间所有元素进行排序
stable_sort 对给定区间所有元素进行稳定排序
partial_sort 对给定区间所有元素部分排序
partial_sort_copy 对给定区间复制并排序
nth_element 找出给定区间的某个位置对应的元素
is_sorted 判断一个区间是否已经排好序
partition 使得符合某个条件的元素放在前面
stable_partition 相对稳定的使得符合某个条件的元素放在前面
语法描述为:
(1)sort(begin,end),表示一个范围,例如:
#include "stdafx.h"
#include<iostream>
#include <algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a[10]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
sort(a,a+5);
for(i=0;i<10;i++)
cout<<a[i]<<" ";
system("pause");
return 0;
}
输出结果将是把数组a按升序排序,说到这里可能就有人会问怎么样用它降序排列呢?这就是下一个讨论的内容。
(2)sort(begin,end,compare)
一种是自己编写一个比较函数来实现,接着调用三个参数的sort:sort(begin,end,compare)就成了。
对于list容器,这个方法也适用,把compare作为sort的参数就可以了,即:sort(compare)。
1)自己编写compare函数:
bool compare(int a,int b) //注意这里的返回值类型,是bool类型,而不是qsort()函数那样的int类型,而且参数更加简化了
{
return a<b; //按升序排序,如果按降序排序改为“a>b”
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[10]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
sort(a,a+10,compare);
for(i=0;i<10;i++)
cout<<a[i]<<" ";
system("pause");
return 0;
}
2)更进一步,让这种操作更加能适应变化。也就是说,能给比较函数一个参数,用来指示是按升序还是按降序排,这回轮到函数对象出场了。
为了描述方便,我先定义一个枚举类型EnumComp用来表示升序和降序。很简单:
enum Enumcomp{ASC,DESC};
class compare
{
private:
Enumcomp comp;
public:
compare(Enumcomp c):comp(c) {};
bool operator () (int num1,int num2)
{
switch(comp)
{
case ASC:
return num1<num2;
case DESC:
return num1>num2;
}
}
};
int main()
{
int a[20]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
sort(a,a+20,compare(DESC));
for(i=0;i<10;i++)
cout<<a[i]<<" ";
return 0;
}
3)其实对于这么简单的任务(类型支持“<”、“>”等比较运算符),完全没必要自己写一个类出来。标准库里已经有现成的了,就在functional里,include进来就行了。functional提供了一堆基于模板的比较函数对象。它们是(看名字就知道意思了):equal_to<Type>、not_equal_to<Type>、greater<Type>、greater_equal<Type>、less<Type>、less_equal<Type>。对于这个问题来说,greater和less就足够了,直接拿过来用:
升序:sort(begin,end,less<data-type>());
降序:sort(begin,end,greater<data-type>()).
#include "stdafx.h"
#include<iostream>
#include <algorithm>
#include <xfunctional>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a[10]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
sort(a,a+10,greater<int>());
for(i=0;i<10;i++)
cout<<a[i]<<" ";
system("pause");
return 0;
}
int main()
{
vector <int> vec;
int a,i=0;
cin>>a;
while(cin.peek()!='\n')
{
vec.push_back(a);
cin>>a;
}
vec.push_back(a);
sort(vec.begin(),vec.end(),greater<int>());
while(i<vec.size())
cout<<vec[i++]<<" ";
system("pause");
return 0;
}
4)既然有迭代器,如果是string 就可以使用反向迭代器来完成逆序排列,程序如下:
#include "stdafx.h"
#include<iostream>
#include<string>
#include <algorithm>
using namespace std;
int main()
{
string str("wanjun");
string s(str.rbegin(),str.rend());
cout<<s<<endl;
system("pause");
return 0;
}
分享到:
相关推荐
用c++写的快速排序 Swap交换两个int类型的数据 Sort排序 QuickSort快速排序(递归) main
c++快排(快速排序)的源代码。代码简洁明了。让您知道理解快排。 用一个函数解决快排问题。 请您赶快来下载吧!
快速排序在实际应用中表现出优秀的性能,是目前应用最广泛的排序算法之一。 在C++中,使用模板可以实现这三种排序算法的通用性,方便在不同数据类型上进行排序。`order.cpp`文件很可能包含了这些排序算法的模板实现...
快速排序(quick sort)C++源代码
本文将深入探讨C++中实现的一些常见排序算法,包括冒泡排序、快速排序和直接插入排序。这些排序算法对于理解计算机如何处理和组织大量数据至关重要。 首先,让我们来看看冒泡排序。冒泡排序是一种基础的排序算法,...
快速排序是C++中最常用的排序算法之一,由英国计算机科学家C.A.R. Hoare提出。它使用分治策略,选择一个基准元素,将数组分为两部分,一部分的所有元素都小于基准,另一部分的元素都大于基准,然后递归地对这两部分...
### C++排序算法之快速排序源码解析 #### 一、快速排序简介 快速排序是一种高效的排序算法,采用分治法策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。它由英国计算机科学家托尼·霍尔...
全面的排序算法实现,包括插入排序、合并排序、堆排序、快速排序。 堆排序:HeapSort 讲解详见http://blog.csdn.net/fly_yr/article/details/8550701 插入排序:InSertion_Sort 讲解详见...
以下是一个简单的C++快速排序代码实现示例,基于上述步骤: ```cpp #include using namespace std; void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } int partition(int arr[], int low, ...
C++中的标准模板库(STL)虽然提供了sort函数,但理解并实现快速排序算法有助于深入理解排序过程。 快速排序的主要步骤包括: 1. **选择基准**:从待排序的数组中选择一个元素作为基准,通常选择第一个或最后一个...
2. **快速排序**(Quick Sort)由C.A.R. Hoare提出,是一种高效的排序算法,采用分治策略。选择一个“基准”元素,将数组分为两部分,一部分的所有元素都小于基准,另一部分的所有元素都大于基准,然后对这两部分再...
总的来说,理解并能熟练应用归并排序和快速排序是每个C++开发者必备的技能之一。通过学习和实践这两个排序算法,不仅可以提升编程能力,还能加深对数据结构和算法的理解,这对于解决实际问题具有极大的价值。
- `sort_quick`可能是实现快速排序的函数名,它可能接受一个`vector<int>`类型的参数,代表待排序的整数序列。 - 函数内部将使用上述描述的快速排序算法逻辑,通过递归调用自身来完成排序。 在数据结构实验中,这...
在C++中,可以使用递归实现快速排序,每次调用快速排序函数时,处理子数组直到所有元素都被正确排序。 快速排序的平均时间复杂度为O(n log n),在最坏情况下(输入数组已经完全排序或逆序)时间复杂度为O(n^2),但...
在C++中,最常用的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序以及堆排序等。每种排序算法都有其独特的优缺点,如时间复杂度、空间复杂度以及稳定性等。 1. 冒泡排序:是最简单的排序算法,通过...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治策略,即将一个大问题分解为小问题来解决。快速排序的主要步骤包括选择一个基准元素、划分数组以及递归排序子数组。...
4. 快速排序(Quick Sort) 快速排序由C.A.R. Hoare在1960年提出,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录继续进行排序,...
- `quick_sort`函数实现了原始的快速排序算法,其中`partition`函数负责分割操作,通过不断调整元素的位置,最终确定基准元素的位置,并返回该位置索引。 #### 性能测试 代码中还包含了一个简单的性能测试,通过`...
本文将深入探讨两种广泛应用的排序算法——归并排序(Merge Sort)和快速排序(Quick Sort),并结合C++语言实现进行性能比较。 归并排序是一种基于分治策略的排序算法。其基本思想是将大问题分解为小问题,再将...
在压缩包中的"快速排序"文件可能包含了不同语言版本的快速排序代码实现,比如C、C++、Java、Python等,以及可能包含了一些测试数据和运行结果。通过学习和理解这些代码,你可以更深入地掌握快速排序算法的细节和应用...