每天一个小程序(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>
 
v
oid 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();}


0 0
原创粉丝点击