程序员的知识教程库

网站首页 > 教程分享 正文

STL中排序算法sort详解(stl sort用的什么排序)

henian88 2024-10-11 12:08:11 教程分享 12 ℃ 0 评论

一.概述

STL几乎封装了所用的数据结构中的算法,这里主要介绍排序算法的使用,指定排序迭代器区间后,即可实现排序功能。

所需头文件#include <algorithm>

sort函数:对给定区间所有元素进行排序,默认两个参数或三个参数,第一个参数待排序区间的首地址,第二个参数待排序区间尾地址的下一个地址

只传递两个参数默认使用升序排序,如想按照降序排序需要传入第三个参数,第三个参数可以使用库函数也可以自定义比较函数。

第三个参数使用库函数:

包含头文件<functional>

升序:less<data-type>()

降序:greater<data-type>()

二.使用

2.1 对数组排序

2.1.1 使用库函数作为比较函数

#include "stdio.h"

#include "stdlib.h"

#include <algorithm>

#include <functional>

using namespace std;

int main1()

{

int data[10] = {0};

for (int i=0; i<10; i++)

{

data[i] = rand() % 10;

}

printf("排序前数据:");

for (int i=0; i<10; i++)

{

printf("%d ", data[i]);

}

//升序排序

sort(data, data+10, less<int>());

printf("\n升序后数据:");

for (int i = 0; i < 10; i++)

{

printf("%d ", data[i]);

}

//降序排序

sort(data, data+10, greater<int>());

printf("\n降序后数据:");

for (int i = 0; i < 10; i++)

{

printf("%d ", data[i]);

}

getchar();

return 1;

}

2.1.2 自定义比较函数

#include "stdio.h"

#include "stdlib.h"

#include <algorithm>

using namespace std;

//升序比较函数

bool compare1(const int& a , const int& b)

{

return a < b;

}

//降序比较函数

bool compare2(const int& a, const int& b)

{

return a > b;

}

int main()

{

int data[10] = { 0 };

for (int i = 0; i < 10; i++)

{

data[i] = rand() % 10;

}

printf("排序前数据:");

for (int i = 0; i < 10; i++)

{

printf("%d ", data[i]);

}

//升序排序

sort(data, data + 10, compare1);

printf("\n升序后数据:");

for (int i = 0; i < 10; i++)

{

printf("%d ", data[i]);

}

//降序排序

sort(data, data + 10, compare2);

printf("\n降序后数据:");

for (int i = 0; i < 10; i++)

{

printf("%d ", data[i]);

}

getchar();

return 1;

}

2.2 对vector排序

2.2.1 对vector存放的整形排序

#include "stdio.h"

#include "stdlib.h"

#include <vector>

#include <algorithm>

#include <functional>

using namespace std;

//升序比较函数

int compare1(const int &a, const int &b)

{

return a < b;

}

//降序比较函数

int compare2(const int &a, const int &b)

{

return a > b;

}

int main()

{

vector<int> v;

for (int i=0; i<10; i++)

{

v.push_back(rand() % 10);

}

//遍历输出

printf("排序前数据:");

for (vector<int>::iterator it = v.begin(); it != v.end(); it++)

{

printf("%d ", *it);

}

//升序排序

sort(v.begin(), v.end(), compare1);

//遍历输出

printf("\n升序后数据:");

for (vector<int>::iterator it = v.begin(); it != v.end(); it++)

{

printf("%d ", *it);

}

//降序排序

sort(v.begin(), v.end(), greater<int>());

//遍历输出

printf("\n降序后数据:");

for (vector<int>::iterator it = v.begin(); it != v.end(); it++)

{

printf("%d ", *it);

}

getchar();

return 1;

}

2.2.2 对vector存放的类成员变量排序

#include "stdio.h"

#include <string>

#include <vector>

#include <algorithm>

#include <functional>

using namespace std;

class Student {

public:

Student(string n, int c) :name(n), core(c) {}

stringname;

intcore;

};

//升序比较函数

bool compare1(const Student& s1, const Student& s2)

{

return s1.core < s2.core;

}

//降序比较函数

bool compare2(const Student& s1, const Student& s2)

{

return s1.core > s2.core;

}

int main()

{

vector<Student> v;

Student s1("aaaa", 97);

Student s2("bbbb", 99);

Student s3("cccc", 95);

v.push_back(s1);

v.push_back(s2);

v.push_back(s3);

printf("排序前数据:\n");

for (vector<Student>::iterator it = v.begin(); it != v.end(); it++)

{

printf("%s; %d\n", ((*it).name).c_str(), (*it).core);

}

//升序排序

sort(v.begin(), v.end(), compare1);

printf("\n升序后的数据:\n");

for (vector<Student>::iterator it = v.begin(); it != v.end(); it++)

{

printf("%s; %d\n", ((*it).name).c_str(), (*it).core);

}

//降序排序

sort(v.begin(), v.end(), compare2);

printf("\n降序后的数据:\n");

for (vector<Student>::iterator it = v.begin(); it != v.end(); it++)

{

printf("%s; %d\n", ((*it).name).c_str(), (*it).core);

}

getchar();

return 1;

}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表