注意:
int、char、string之类的是可以之间使用>,<,==之类的进行判断,char*类型的使用strcmp就行了
而struct与vector都可以当做数组进行处理,cmp函数传递值的类型,是数组中单个元素类型所决定的。不同的是vector向量
的起始迭代位置是使用a.begin()来表示,同时也可以使用a.begin()+k,来调整迭代指针的位置
-
使用qsort对数组进行排序(int、char、char*、struct等等)
定义qsort中的cmp函数
//返回-1表示不需要进行交换,返回1表示需要进行交换
//传递的参数是const void*,需要在函数体内部进行强制类型转换后,在进行返回值的判定
int cmp(const void *a,const void *b)
{
Student *a1,*b1;
a1 = (Student*)a;
b1 = (Student*)b;
if( a1->data!=b1->data ){
return a1->data<b1->data?-1:1;//由小到大进行排序
}else{
return a1->number<b1->number?-1:1;
}
}
调用qsort
//必须包含头文件
#include<stdlib.h>
//参数s,表示等待排序的数组的起始位置,s表示从s[0]开始,s+k表示从s[k]开始
//参数5,表示从起始位置开始,连续多少个元素参与排序
//参数sizof(Student),表示参与排序的单个元素的内存空间大小
//参数cmp,表示qsort中的cmp函数
qsort(s,5,sizeof(Student),cmp);
实例代码:
#include<stdio.h>
#include<stdlib.h>
struct Student{
int data;
int number;
}s[20];
int cmp(const void *a,const void *b)//返回-1表示不需要进行交换,返回1表示需要进行交换
{
Student *a1,*b1;
a1 = (Student*)a;
b1 = (Student*)b;
if( a1->data!=b1->data ){
return a1->data<b1->data?-1:1;
}else{
return a1->number<b1->number?-1:1;
}
}
int main()
{
for(int i=0; i<5; i++){
scanf("%d %d",&s[i].data,&s[i].number);
}
qsort(s,5,sizeof(Student),cmp);
printf("排序后:\n");
for(int i=0; i<5; i++){
printf("%d %d\n",s[i].data,s[i].number);
}
return 0;
}
定义sort中的cmp函数
//返回true表示不需要进行交换,返回false表示需要进行交换
//传递的参数是type,比如int,float,Student
bool cmp(Student a,Student b)
{
if( a.data==b.data ){
return a.number<b.number; //number由小到大返回true,不用进行交换
}else{
return a.data<b.data; //data由小到大返回true,不用进行交换
}
}
调用sort
//必须包含头文件
#include<algorithm>
//必须包含
using namspace std;
//参数s,表示等待排序的数组的起始位置,s表示从s[0]开始,s+k表示从s[k]开始
//参数s+6,表示从s[0]位置开始,连续6个元素参与排序
//参数cmp,表示qsort中的cmp函数
sort(s,s+6,cmp);
实例代码:
#include<stdio.h>
#include<algorithm>
using namespace std;
struct Student{
int data;
int number;
}s[20];
bool cmp(Student a,Student b)
{
if( a.data==b.data ){
return a.number<b.number; //number由小到大返回true,不用进行交换
}else{
return a.data<b.data; //data由小到大返回true,不用进行交换
}
}
int main()
{
for(int i=0; i<6; i++){
scanf("%d %d",&s[i].data,&s[i].number);
}
sort(s,s+6,cmp);
printf("排序后:\n");
for(int i=0; i<6; i++){
printf("%d %d\n",s[i].data,s[i].number);
}
return 0;
}
sort对vector进行排序
#include <algorithm>
#include <vector>
vector<int> vec;
//比较函数,这里的元素类型要与vector存储的类型一致
bool compare(int a,int b)
{
return a<b; //升序排列
}
std::sort(vec.begin(),vec.end(),compare);
至于,vector内部究竟是什么数据类型,也会决定compare内部的排序
另外,若不自定义比较函数,默认是按照升序排序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)