栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言中快排函数——qsort()

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言中快排函数——qsort()

qsort()函数

qsort()函数是C库提供的快排函数接口

#indlude 
void qsort(void *base, size_t nmemb, size_t size,
                  int (*compar)(const void *, const void *));
/*
 * base:需要排序的数组
 * nmemb:数组元素个数
 * size: 每个元素的大小
 * compar: 指向一个比较函数,根据cmp函数的比较,决定数组是升序排列还是降序排列
int型数据排序
// a > b 交换, 从小到大
int cmp(const void *a, const void *b)
{
	return *(int *)a - *(int *)b;
}

// a < b 交换, 从大到小
int cmp1(const void *a, const void *b)
{
	return *(int *)b - *(int *)a;
}

int main()
{
	int arr[5] = {4,5,3,7,6};
	int n = sizeof(arr)/sizeof(arr[0]);
	int size = sizeof(int);
	qsort(arr, n, size, cmp);
	qsort(arr, n, size, cmp1);
	for (int i = 0;i < n;i++) {
		printf("%dt", arr[i]);
	}
	printf("n");
	
	return 0;
}
char类型

和int类型相似

int cmp1(const void *a, const void *b)
{
	// 由大到小
	return *(char *)b - *(char *)a;
}

int main()
{
	char arr[5] = {'a','A','2','e','W'};
	int n = sizeof(arr)/sizeof(arr[0]);
	int size = sizeof(char);
	qsort(arr, n, size, cmp1);
	for (int i = 0;i < n;i++) {
		printf("%ct", arr[i]);
	}
	printf("n");
	
	return 0;
}
double类型
int cmp1(const void *a, const void *b)
{
	// 由大到小
	return ((*(double *)b - *(double *)a) > 0?1:-1);
}

int main()
{
	double arr[5] = {4.3,5.4,4.2,4.31,5.134};
	int n = sizeof(arr)/sizeof(arr[0]);
	int size = sizeof(double);
	qsort(arr, n, size, cmp1);
	for (int i = 0;i < n;i++) {
		printf("%ft", arr[i]);
	}
	printf("n");
	
	return 0;
}
结构体类型
struct Date {
	int date;
	int count;
};
int cmp1(const void *a, const void *b)
{
	// 由大到小
	//根据date排序
	//return ((struct Date *)b)->date - ((struct Date *)a)->date;
	//根据count排序
	return ((struct Date *)b)->count - ((struct Date *)a)->count;
}

int main()
{
	struct Date arr[5] = {
		{3,1},
		{4,2},
		{9,5},
		{6,7},
		{8,2}
	};
	int n = sizeof(arr)/sizeof(arr[0]);
	int size = sizeof(arr[0]);
	qsort(arr, n, size, cmp1);
	for (int i = 0;i < n;i++) {
		printf("%dt", arr[i].date);
		printf("%dt", arr[i].count);
		printf("n");
	}
	printf("n");
	
	return 0;
}
字符串
  • 二维数组
int cmp1(const void *a, const void *b)
{
	// 由大到小
	return strcmp((const char*)a, (const char*)b);
}

int main()
{
	char arr[5][10] = {
		"hello",
		"world",
		"china",
		"xian",
		"print"
	};
	int n = sizeof(arr)/sizeof(arr[0]);
	int size = sizeof(arr[0]);
	qsort(arr, n, size, cmp1);
	for (int i = 0;i < n;i++) {
		printf("%sn", arr[i]);
	}
	printf("n");
	
	return 0;
}
  • 字符指针数组
int cmp1(const void *a, const void *b)
{
	// 由大到小
	// 如果是指针数组,传进来的是二级指针,去*后是每一个字符指针(字符串的地址),最终交换的是字符指针的位置
	return strcmp(*(char**)a, *(char**)b);
}

int main()
{
	char *arr[5] = {0};
	int n = sizeof(arr)/sizeof(arr[0]);
	for (int i = 0;i < n;i++) {
		arr[i] = (char *)malloc(sizeof(char*));
		scanf("%s", arr[i]);
	}
	int size = sizeof(arr[0]);
	qsort(arr, n, sizeof(char*), cmp1);
	for (int i = 0;i < n;i++) {
		printf("%sn", arr[i]);
	}
	printf("n");
	
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/920522.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号