您的位置:首页 > 编程语言 > C语言/C++

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

}

#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();
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: