前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >qsort函数专题

qsort函数专题

作者头像
用户11039545
发布2024-03-28 17:45:59
780
发布2024-03-28 17:45:59
举报
文章被收录于专栏:c语言c语言

qsort使用练习:练习使用库函数,qsort排序各种类型的数据

排序整型数据

代码语言:javascript
复制
# define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>     /* qsort */

int int_cmp(const void* p1, const void* p2)
{
	return (*(int*)p1 - *(int*)p2);//将void*类型转化为int*类型,并将其解引用
}
int main()
{
	int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
	int i = 0;
	qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), int_cmp);//(首元素地址,元素个数,字节数,比较函数)
	for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	return 0;
}

排序结构体

按照年龄比较
代码语言:javascript
复制
# define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>     /* qsort */
struct Stu
{
	char name[20];
	int age;
};
int cmp_by_age(const void* e1, const void* e2)
{
	return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}
void test()
{
	struct Stu s[] = { {"zhangsan",20},{"lisi",19},{"wangwu",30} };
	int sz = sizeof(s) / sizeof(s[0]);
	qsort(s, sz, sizeof(s[0]), cmp_by_age);
}
int main()
{
	test();
	return 0;
}
按照姓名比较
代码语言:javascript
复制
# define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>     /* qsort */
#include<string.h>
struct Stu
{
	char name[20];
	int age;
};
int cmp_by_name(const void* e1, const void* e2)
{
	return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
void test()
{
	struct Stu s[] = { {"zhangsan",20},{"lisi",19},{"wangwu",30}};
	int sz = sizeof(s) / sizeof(s[0]);
	qsort(s, sz, sizeof(s[0]), cmp_by_name);
}

int main()
{
	test();
	return 0;
}

qsort模拟实现:模仿qsort的功能实现一个通用的冒泡排序

代码语言:javascript
复制
# define _CRT_DEFINE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>     /* qsort */
#include<string.h>
int int_cmp(const void* p1, const void* p2)
{
	return (*(int*)p1 - *(int*)p2);
}
void swap(void* p1, void* p2, int size)
{
	int i = 0;
	for (i = 0; i < size; i++)
	{
		char tmp = *((char*)p1 + i);
		*((char*)p1 + i) = *((char*)p2 + i);
		*((char*)p2 + i) = tmp;

	}
}
void bubble(void* base, int count, int size, int(*cmp)(void*, void*))
{
	int i = 0;
	int j = 0;
	for (i = 0; i < count - 1; i++)//冒泡排序
	{
		for (j = 0; j < count - i - 1; j++)
		{
			if (cmp((char*)base + j * size, (char*)base + (j + 1) * size) > 0)
			{
				swap((char*)base + j * size, (char*)base + (j + 1) * size, 4);
			}
		}
	}
}
int main()
{
	int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
	int i = 0;
	bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), int_cmp);
	for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • qsort使用练习:练习使用库函数,qsort排序各种类型的数据
    • 排序整型数据
      • 排序结构体
        • 按照年龄比较
        • 按照姓名比较
    • qsort模拟实现:模仿qsort的功能实现一个通用的冒泡排序
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档