qsort的使用
结构体基本使用
1.变量的用法
typedef struct
{
char c;
int k;
int d;
} stu ;
int main()
{
int K;
stu A;
K=A.c = 6;
printf("%d", K);
return 0;
}
输出
2.结构体指针的使用
#include <stdio.h>
typedef struct
{
char c;
int k;
int d;
} stu ;
int main()
{
int K;
stu *A;//定义了一个结构体指针类型的变量
K=A->c = 6;
printf("%d", K);
return 0;
}
输出也是一样的效果
qsort函数的参数简单介绍
void qsort(void*base,size_t num,size_t size,int(*cmp)(const void*,const void*);
/************************************************************************
参数1:待排数据中的第一个对象的地址;
参数2:排序数据元素的个数;
参数3:排序数据中一个元素的大小,单位是字节;
参数4:函数指针,是用来比较排序数据中的两个元素的函数
*************************************************************************/
引入(冒泡排序)
主要代码
//排序一个升序的整形数组
void sort_arr(int*arr,int sz)
{
int i,k;
for(i=0;i<sz-1;i++)
{
if(arr[k]>arr[k+1])
{
for(k=0;k<sz-i-1;k++)
{
int temp=arr[k+1];
arr[k+1]=arr[k];
arr[k]=temp;
}
}
}
}
int main()
{
int arr[]={1,0,2,3,4,7,6,5,9,8};
int sz=sizeof(arr)/sizeof(arr[0]);
sort_arr(int*arr,int sz)
return 0;
}
1.使用qsort函数排序一个整形数组
//比较函数
int Sort_Arr(const void* e1,const void* e2)
{
return *(int*)e1-*(int*)e2;
//注意:想要实现降序时:两个参数对换一下前后位置或者大括号括起来乘以负一
/***************************************
当前面的参数大于后面的参数时,函数返回大于零的数,即1
当前面的参数等于后面的参数时,函数返回0
当前面的参数小于后面的参数时,函数返回小于零的数,即-1
****************************************/
}
void Sort()
{
int arr[]={1,0,2,3,4,7,6,5,9,8};
int sz=sizeof(arr)/sizeof(arr[0]);
//这里顺便复习一下,函数作为参数时,两种写法:直接函数名或者&函数名
qsort(arr,sz,sizeof(arr[0],Sort_Arr);
}
int main()
{
Sort();
return 0;
}
2.使用qsort函数排序一个结构体类型的数组
主要代码
typedef struct
{
int age;
char arr[20];
}T;
//定义一个结构体类型数据的数组
T man[] = { {66,"李四"},{99,"阿三"},{88,"王五"} };
void sort_name(const void* e1,const void *e2)
{
//按照name排
return strcmp(((T*)e1)->arr , ((T*)e2)->arr);
}
void text2(void)
{
int sz=sizeof(man) / sizeof(man[0]);
qsort(man, sz, sizeof(man[0]), sort_name);
//可打印验证或者监视
printf("%s ", man[0].arr);//阿三
printf("%s ", man[1].arr);//李四
printf("%s ", man[2].arr);//王五
}
int main()
{
text2();
return 0;
}
总结如有错误,欢迎帮忙指正