qsort用法:
qsort函数(全称quicksort)。它是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n)
qsort(num,100,sizeof(num[0]),cmp_int);
qsort要求提供一个自己定义的比较函数。比较函数使得qsort通用性更好,有了比较函数qsort可以实现对数组、字符串、结构体等结构进行升序或降序排序
下面是c语言中各个数据类型对比较数组的使用
1、对int数组进行排序
int num[100];
int cmp_int(const void* _a , const void* _b) //参数格式固定
{
int* a = (int*)_a; //强制类型转换
int* b = (int*)_b;
return *a - *b;
}
qsort(num,100,sizeof(num[0]),cmp_int);
参数列表是两个空指针,现在他要去指向你的数组元素。所以转换为你当前的类型,然后取值。默认升序排列(从小到大),如果想降序排列返回就返回*b-*a。
2、对double型数组排序
double in[100];
int cmp_double(const void* _a , const void* _b) //参数格式固定
{
double* a = (double*)_a; //强制类型转换
double* b = (double*)_b;
return *a > *b ? 1 : -1; //特别注意
}
3、对char型数组排序(同int类型)
char word[100];
int cmp_char(const void* _a , const void* _b) //参数格式固定
{
char* a = (char*)_a; //强制类型转换
char* b = (char*)_b;
return *a - *b;
}
qsort(word,100,sizeof(word[0]),cmp_char);
4、对字符串进行排序
char word[100][10];
int cmp_string(const void* _a , const void* _b) //参数格式固定
{
char* a = (char*)_a; //强制类型转换
char* b = (char*)_b;
return strcmp(a,b);
}
qsort(word,100,sizeof(word[0]),cmp_string);
这是对qsort使用的示范
int cmp(const void* _a,const void* _b){
int a=*(int*)_a;
int b=*(int*)_b;
return a-b;
}
bool containsDuplicate(int* nums, int numsSize) {
qsort(nums,numsSize,sizeof(int),cmp);//调用qsort进行排序
for(int i=0;i<numsSize-1;i++){
if(nums[i]==nums[i+1]){
return true;
}
}
return false;
}