每天一个小程序(7)——C++中sort函数的应用
2014-03-22 10:58
459 查看
身为一个不算程序员的程序员,目前来说,最令我们头疼的应该就是那繁多的数据结构和算法问题,例如排序,数据存储等等。而STL为我们提供了一个方便的平台,它提供了大约100个实现算法的模板函数。我们熟悉了STL之后,许多代码都可以被简化,而且能提升运算的效率。我想在我们入职真正的程序员之后,STL将为我们提供很大的便利。
而在之前我知道有STL中list,string,vector这几个简单的用法,昨天通过友人雷锋,知道了身处在<algorithm>这个头文件中的sort函数,顿时觉得我的懒惰终于有处使了,嘿嘿嘿。
言归正传,sort函数的定义如下:
#inlcude <algorithm>
using namespace std;
default (1):
template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);
custom (2):
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
sort函数默认是升序排列,函数的用法是sort(a,a+n); 两个参数分别为需要排序数组的首地址和尾地址。
进一步的方法是可以自己写cmp函数,可以进行一些更复杂的结构体的排序。
例如
int cmp(const Data &a,const Data &b)
{
if(a.data < b.data)//升序
return 1;
else
return 0;
}
而在之前我知道有STL中list,string,vector这几个简单的用法,昨天通过友人雷锋,知道了身处在<algorithm>这个头文件中的sort函数,顿时觉得我的懒惰终于有处使了,嘿嘿嘿。
言归正传,sort函数的定义如下:
#inlcude <algorithm>
using namespace std;
default (1):
template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);
custom (2):
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
sort函数默认是升序排列,函数的用法是sort(a,a+n); 两个参数分别为需要排序数组的首地址和尾地址。
进一步的方法是可以自己写cmp函数,可以进行一些更复杂的结构体的排序。
例如
int cmp(const Data &a,const Data &b)
{
if(a.data < b.data)//升序
return 1;
else
return 0;
}
#include <stdio.h> #include <algorithm> using namespace std; int a[] = {12,3,35,8,-19,1999,100,9,0,23}; struct Data { int data; int num; }data[10]; //打印数组 void print1() { for(int i = 0; i < 10; i++) { printf("%d ",a[i]); } printf("\n"); } //数组排序 void sort1() { sort(a,a+10); } //结构体数组赋值 void insert() { for(int i = 0; i < 10; i++) { data[i].data = a[i]; } } //打印结构体数组 void print2() { for(int i = 0; i < 10; i++) { printf("%d ",data[i].data); } printf("\n"); } //结构体数组排序函数 int cmp(const Data &a,const Data &b) { if(a.data > b.data)//降序排列 return 1; else return 0; } //结构体数组排序 void sort2() { sort(data,data+10,cmp); //sort(data,data+10); } void main() { //结构体数组赋值 insert(); //数组排序 printf("数组排序前:\n"); print1(); sort1(); printf("数组排序后:\n"); print1(); //结构体数组排序 printf("结构体数组排序前:\n"); print2(); sort2(); printf("结构体数组排序后:\n"); print2(); }
相关文章推荐
- 每天一个C++小程序(十六)--线性表
- C++ 容器的综合应用的一个简单实例——文本查询程序
- 每天一个c++小程序(2):二维数组动态创建
- 每天一个C++小程序(十七)--矩阵链乘
- 每天一个c++小程序(1):快速排序
- 每天一个C++小程序(十八)--插入排序
- 每天一个C++小程序(十四)--堆排序
- 每天一个C++小程序(十五)--快速排序
- 每天一个C++小程序(求线段长度)
- 每天一个C++小程序(求圆面积)
- 每天一个小程序(5)——栈的应用数制转换
- C++ 容器的综合应用的一个简单实例——文本查询程序
- 每天一个C++小程序(二十)--简单的飘雪程序
- 每天一个C++小程序(十九)--桶排序
- 每天一个小程序——选择排序时的一个小问题!
- 用c++写一个 “hello,world” 的 FastCGI程序
- 每天一个小程序——第 0001 题:生成200个验证码
- 每天一个小程序(9)——链队
- 每天一个python小程序
- 消息框的应用—写一个恶搞程序^_^