一.目的
最近刷题总会遇到排序,因为快排已经写了很多了,就想省些时间用一下C++中的排序函数。
对于二维数组传参,以前解决过好多次,但总会忘记,所以今天总结一下。
二.排序(头文件: algorithm)
1.sort():对给定区间所有元素进行排序
该函数有两个参数的形式和三个参数的形式。
例如:对于一个一维数组排序. int a[10];
两个参数:
sort(a, a+10);//两个参数默认是升序排列
三个参数:
sort(a, a+10, compare);//compare是一个由你自己定义的比较函数在这个函数里你可以它是升序还是降序。
compare函数的声明:
int compare(int a, int b);
{
return a>b;//这里是降序, a<b是升序。
}
2.qsort()
函数原型:
void qsort(void base, size_t nelem, size_t width, int (*fcmp)(const void,const void *))
输入参数:
Base:待排序的数组名
nelem:数组元数的个数(长度)
width:每一个元素所占存储空间的大小
fcmp:用于对数组元素进行比较的函数的指针(该函数是要自己写的)
例子:
对一个一维数组进行排序: int a[10];
qsort(a, sizeof(a), sizeof(int), compare);
具体代码
#include<iostream>
#include<stdlib.h>
using namespace std;
int com(const void *a,const void *b){
return (*(int*)a-*(int*)b)<0; //降序 >0升序
}
int main(){
int a[10];
int i;
for(i=0;i<10;++i)
cin>>a[i];
qsort(a,10,sizeof(int),com);
for(i=0;i<10;++i)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
三.二维数组传参
有两种方式:
例如:对一个二维数组排序 int a[10][5];
1.声明:
void sort(int a[][5]);//第二个括号内必须有列数
2.声明:
void sort(int (*a)[5]);//指针数组