每天一个小程序(7)——C++中sort函数的应用
来源:互联网 发布:网络播放量vlinkage 编辑:程序博客网 时间:2024/05/16 10:26
身为一个不算程序员的程序员,目前来说,最令我们头疼的应该就是那繁多的数据结构和算法问题,例如排序,数据存储等等。而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;
}
#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();}
- 每天一个小程序(7)——C++中sort函数的应用
- 每天一个小程序(5)——栈的应用数制转换
- 每天一个小程序(4)——顺序栈
- 每天一个小程序(6)—— 链栈
- 每天一个小程序(9)——链队
- 每天一个小程序(18)——“牛津"词典
- 每天一个小程序(1)——链表的创建
- 每天一个小程序(19)——选择排序
- 每天一个java小程序-7
- 每天一个java小程序-7
- 每天一个C程序
- 每天一个小程序(2)——带头结点的链表的创建以及插入和删除
- 每天一个小题目——小明的棋盘
- 每天一个小程序(3)——双向链表
- 每天一个小程序(8)——顺序循环队列
- 每天一个小程序(10)——直接插入排序
- 每天一个小程序(11)——折半插入排序
- 每天一个小程序(12)——交换排序之冒泡排序
- 基础学习篇-学习笔记流水账
- 【转】浅谈VB.NET中的接口 - 妖居 - 博客园
- 线程看门狗
- struts2 的tree和treenode标签(非表单标签)
- memcache研究笔记 之 item_locks锁数组
- 每天一个小程序(7)——C++中sort函数的应用
- Android事件传递机制
- 深入理解Java Class文件格式(五)
- Activity状态转换和Activity栈
- DOCTYPE 严格模式与JS严格模式
- eclipse / myeclipse 常用快捷键
- struts2 Tooltip 相关属性属性(表单标签)
- 负债经营的利弊
- 习近平和彭丽媛会见美国总统奥巴马夫人米歇尔