编程时经常遇到对数组排序或在一个数组中查找数字的情况,C库<stdio.h>中提供了简便的调用方法,将排序算法封装成通用的排序函数;
排序函数qsort
void qsort(
void *base,
size_t n,
size_t size,
int (*compar)(const void *, const void *)
);
在使用时,用户需要自己编写一个判断两个数(不仅限于数字)比较大小的方法;
比如简单的判断两个数字的大小:
int num_comp(const int *a,const int *b)
{
if(*a==*b)
return 0;
return *a>*b?1:-1;
}
注意函数的格式是不能变的,且第一个参数>第二个参数,需要返回一个正数.
在调用时,该如何调用呢?
如果有一个数组int num[100];
里面是100个未排序的数字,要将这个数组按升序排列;
调用qsort函数:
qsort(num,100,sizeof(int),(int (*)(const void *,const void *))num_comp);
说明一下这里的参数,
第一个参数num是数组名;
第二个参数100是说这个要排序的数组大小num[0]到num[100-1];
第三个参数是排序的元素大小,这里是Int类型;
第四个是比较函数的指针,(int (*)(const void *,const void *))
是指针类型转换;num_comp
是要比较函数的地址;
#include<iostream>
#include<stdlib.h>
#include<ctime>
using namespace std;
int num_comp(const int *a,const int *b);
int main()
{
int num[100]={
0};
srand(time(0));
//数组初始化,填满0-100随机数;
for(int i=0;i<100;i++