qsort函数排序举例

使用qsort函数快速排序应用举例

这篇博客是用qsort函数来快速排列float型数据,分别按照年龄(int型)、姓名(char型)排列结构体。看懂就看懂,看不懂我也不想解释了。

简略解释一下qsort函数:

void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );

以下内容来自MSDN:

Return Value
None

Parameters
base

Start of target array
num

Array size in elements
width

Element size in bytes
compare

Comparison function
elem1
Pointer to the key for the search

elem2
Pointer to the array element to be compared with the key
博主水平有限,想知道qsort函数具体怎么用的自己百度吧。

直接上代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int cmp_float(const void* e1, const void* e2)
{
	//return (int)*(float*)e1 - *(float*)e2;
	//qsort函数的最后一个参数需要一个返回整型,而这里返回的是一个实型,写成下面的代码会更好:
	if (*(float*)e1 == *(float*)e2)
		return 0;
	else if (*(float*)e1 < *(float*)e2)
		return -1;
	else
		return 1;
}
void text_float()
{
	float f[] = { 1.5,19.0,2.4,8.3,0.8,0.9 };
	int sz = sizeof(f) / sizeof(f[0]);
	qsort(f, sz, sizeof(f[1]), cmp_float);
	for (int i = 0; i < sz; i++)
		printf("%f\n", f[i]);
}

//以下是结构体排序:
struct Stu
{
	char name[20];
	int age;
};


int cmp_struct_by_age(const void* e1, const void* e2)
{
	return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}
int cmp_struct_by_name(const void* e1, const void* e2)
{
    //字符比较大小要用文件夹下的strcmp()函数
	return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}


void text_struct()
{
	
	struct Stu s[] = { {"张三",20},{"李四",30},{"王五",10} };
	int sz = sizeof(s) / sizeof(s[1]);
	qsort(s, sz, sizeof(s[1]), cmp_struct_by_age);
	printf("姓名\t年龄\n");
	for (int i = 0; i < sz; i++)
		printf("%s\t%d\n", s[i].name,s[i].age);
}
void text_name()
{
	struct Stu s[] = { {"张三",20},{"李四",30},{"王五",10} };
	int sz = sizeof(s) / sizeof(s[1]);
	qsort(s, sz, sizeof(s[1]), cmp_struct_by_name);
	printf("姓名\t年龄\n");
	for (int i = 0; i < sz; i++)
		printf("%s\t%d\n", s[i].name, s[i].age);
}


int main()
{
	text_float();//按照升序排列float型数据
	text_struct();//按照年龄升序排列结构体
	text_name();//按照姓名排列结构体
	return 0;
}
最后附上运行结果:

qsort函数排序举例_第1张图片

你可能感兴趣的:(笔记,c语言)