qsort函数的用法

1、通用快速排序函数,可以处理不同类型的数据:qsort(base,num,width,compare)

base:数组开始地址

num:数组个数

width:元素大小(已字节为大小)

compare:数组中两个数比较的规则

2、对下列数组中的值进行排序

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int Compare_int(const void* a, const void* b)
{
	int arg1 = *(const int*)a;//指针解引用
	int arg2 = *(const int*)b;//先强转统一类型,在解引用
	if (arg1 > arg2)
	{
		return 1;
	}
	else if (arg1 < arg2)
	{
		return -1;
	}
	else
	{
		return 0;
	}
	//return (arg1>arg2)-(arg1 < arg2)//一行代码可以替换上述整个if
}
int Compare_string(const void*a, const void* b)
{
	const char *arg1 = *(const char**)a;//crr指针退化成二级指针,所以**,解引用一次,所以用指针接收
	const char *arg2 = *(const char**)a;
	int tmp = strcmp(arg1, arg2);
	return tmp;
}
int Compare_double(const void* a, const void* b)
{
	 double arg1 = *(const double*)a;//drr传进来退化成指针,用*,解引用完用相同类型变量接收
	 double arg2 = *(const  double*)b;
	 double tmp = arg1 - arg2;
	 double ESP = 0.000001;
	 if (tmp<=ESP && tmp>=-ESP)
	 {
		 return 0;
	 }
	 else if(tmp>ESP)
	 {
		 return 1;
	 }
	 else
	 {
		 return -1;
	 }
}

void Show(int* arr, int len)
{
	for (int i = 0; i < len; i++)
	{
		printf("%d", arr[i]);
	}
	printf("\n");
}
void Show_string(const char* arr[], int len)
{
	for (int i = 0; i < len; i++)
	{
		printf("%s ", arr[i]);
	}
	printf("\n");
}
void Show_double(double* arr, int len)
{
	for (int i = 0; i < len; i++)
	{
		printf("%f ", arr[i]);
	}
	printf("\n");
}
int main()
{
	
	int arr[] = {5,4,6,7,3,2};
	qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), Compare_int);
	Show(arr, sizeof(arr) / sizeof(arr[0]));
	
	const char* crr[] = {"xyz","quan","zhang","li"};
	qsort(crr, sizeof(crr) / sizeof(crr[0]), sizeof(char *), Compare_string);
	Show_string(crr , sizeof(crr) / sizeof(crr[0]));

	double drr[] = { 32,22.3,45.3,12.6,41.6 };
	qsort(drr, sizeof(drr) / sizeof(drr[0]), sizeof(double), Compare_double);
	Show_double(drr, sizeof(drr) / sizeof(drr[0]));

}

 结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值