快快快快快快快快快快排

2023-11-21 23:59
文章标签 快快

本文主要是介绍快快快快快快快快快快排,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者简介:დ旧言~,目前大一,现在学习Java,c,Python等
座右铭:松树千年终是朽,槿花一日自为荣。
望小伙伴们点赞👍收藏✨加关注哟💕💕

C语言实现快排☺️

在这里插入图片描述
ℹ️为了追求能在最短的时间中做更多的事情,更加便捷。从最早的马车,到🛻,其次到🛤,最后到🛩。都是为了便捷而发明的工具,而C语言中人们也发明更加便捷的排序,我们称之为------快排。🫤🫤🫤
ℹ️我们最初认识的冒泡法,逻辑简单,但是使用起来单一,占据更多内存,冒泡法的短板及其明显。而快排逻辑复杂,可以解决多种排序问题,并且占据少量的内存。大家跟上我的步伐,一起来看看C语言的快排到底是个啥🏂

💤使用快排

在这里插入图片描述

1️⃣快排知识

我们知道快排这个函数有四个参数void* base, size_t num, size_t size,int (compar)(const void,const void*)

🔹void* base:指向需要排序的数组的第一个元素地址。
🔹size_t num:排序的元素个数。
🔹size_t size:一个元素的大小单位字节数。
🔹int (compar)(const void,const void*):是一个函数指针,指向有两个参数,参数类型为const void*
🔹void*:无具体类型的指针,可以接受任意类型指针。(不能直接解引用操作,也不能直接进行指针运算)

2️⃣快排使用

调用qsort函数方法为:qsort(arr,sizeof(arr)/sizeof(arr[0]),sizeof(int),int_cmp)

▪️第一个参数:为数组名
▪️第二个参数:数组元素个数
▪️第三个参数:数组类型大小
▪️第四个参数:调用一个比较函数(比较函数需要自己实现)

3️⃣举个栗子

🚩排一个整数数组

▫️写出主函数
▫️在主函数调用 qsort 函数
▫️模拟实现比较函数

上代码🙉🙉🙉

#include<stdio.h>
#include<stdlib.h>//快排函数的头文件
#include<string.h>//排一个整数数组
int int_cmp(const void* p1,const void* p2)
{return *(int*)(p1)-*(int*)(p2);
}void test1()
{int arr[] = { 9,8,7,6,5,4,3,2,1,0 };int sz = sizeof(arr) / sizeof(arr[0]);//调用快排函数qsort(arr, sz, sizeof(arr[0]), int_cmp);//打印int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");
}int main()
{//排序整数数组test1();return 0;
}
🚩排一个结构体中的 age

▫️写出主函数
▫️在主函数调用 qsort 函数
▫️模拟实现比较函数

上代码🙉🙉🙉

#include<stdio.h>
#include<stdlib.h>//快排函数的头文件
#include<string.h>//排一个结构体
struct stu
{char name[20];int age;
};int struct_cmp(const void* p1, const void* p2)
{return strcmp(((struct stu*)p1)->name, ((struct stu*)p2)->name);
}void test3()
{struct stu arr[3] = { {"zhangsan",20},{"lisi",19},{"wangwu",18} };int sz = sizeof(arr) / sizeof(arr[0]);//调用快排函数qsort(arr, sz, sizeof(arr[0]), struct_cmp);//打印int i = 0;for (i = 0; i < 3; i++){printf("%s %d\n", arr[i].name, arr[i].age);}
}int main()
{//排一个结构体中的agetest3();return 0;
}

💤模拟快排

为了更加深入快排知识,我们来模拟这个函数🤪🤪🤪

1️⃣模拟快排方法

💦写出主函数
💦主函数调用模拟的快排函数**(这里需要调用交换函数,返回值函数)**
💦写出返回值函数

2️⃣模拟快排知识

🚩返回值函数

这里的返回值函数就和上面的调用比较函数一样

//整数函数比较函数
int int_cmp(const void* p1,const void* p2)
{return *(int*)(p1)-*(int*)(p2);
}
//结构体函数比较函数
int struct_cmp(const void* p1, const void* p2)
{return strcmp(((struct stu*)p1)->name, ((struct stu*)p2)->name);
}
🚩交换函数

因为需要满足每种类型的交换,因此不可能交换类型,只能交换每一个字节大小
我们知道,char的字节数为一个字节,这样的话,我们可以把每种类型都转换成char类型大小,就可以实现字节进行交换。

调用交换函数实参(char*)arr + j * size(强转成char类型,偏移一个元素类型大小)

void Swap(char* p1, char* p2,int size)
{int i = 0;char tmp = 0;for (i = 0; i < size; i++){tmp = *p1;*p1 = *p2;*p2 = tmp;p1++;p2++;}
}
🚩调用快排函数

🔹调用快排函数为四个参数

  1. ▪️第一个参数:为数组名
    ▪️第二个参数:数组元素个数
    ▪️第三个参数:数组类型大小
    ▪️第四个参数:调用一个比较函数(比较函数需要自己实现)

🔹先一个元素交换,后面一个元素字节数交换(采用两个for循环

上代码🙉🙉🙉

void bubble_sort(void* arr, int sz, int size, int(*cmp_int)(void*, void*))
{int i = 0;for (i = 0; i < sz - 1; i++){int j = 0;for (j = 0; j < sz - i - 1; j++){if (cmp_int(  (char*)arr + j*size , (char*)arr + (j + 1)*size   ) > 0){Swap((char*)arr + j * size, (char*)arr + (j + 1) * size, size);}}}
}

3️⃣举个栗子

🚩排一个整数数组
//返回值函数
int cmp_int(const int* p1, const int* p2)
{return *(int*)(p1)-*(int*)(p2);
}//交换函数
void Swap(char* p1, char* p2,int size)
{int i = 0;char tmp = 0;for (i = 0; i < size; i++){tmp = *p1;*p1 = *p2;*p2 = tmp;p1++;p2++;}
}//模拟快排
void bubble_sort(void* arr, int sz, int size, int(*cmp_int)(void*, void*))
{int i = 0;for (i = 0; i < sz - 1; i++){int j = 0;for (j = 0; j < sz - i - 1; j++){if (cmp_int(  (char*)arr + j*size , (char*)arr + (j + 1)*size   ) > 0){Swap((char*)arr + j * size, (char*)arr + (j + 1) * size, size);}}}
}//排序整数数组
void test1()
{int arr[] = { 9,8,7,6,5,4,3,2,1,0 };int sz = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, sz, sizeof(arr[0]), cmp_int);//打印int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");
}int main()
{//实现qsort模拟之排序整数数组test1();return 0;
}
🚩排一个结构体中的 age
//返回值函数
struct stu//定义结构体
{char name[20];int age;
};
int cmp_struct(const int* p1, const int* p2)
{return strcmp(((struct stu*)p1)->name, ((struct stu*)p2)->name);
}//交换函数
void Swap(char* p1, char* p2,int size)
{int i = 0;char tmp = 0;for (i = 0; i < size; i++){tmp = *p1;*p1 = *p2;*p2 = tmp;p1++;p2++;}
}//模拟快排
void bubble_sort(void* arr, int sz, int size, int(*cmp_int)(void*, void*))
{int i = 0;for (i = 0; i < sz - 1; i++){int j = 0;for (j = 0; j < sz - i - 1; j++){if (cmp_int(  (char*)arr + j*size , (char*)arr + (j + 1)*size   ) > 0){Swap((char*)arr + j * size, (char*)arr + (j + 1) * size, size);}}}
}//排序结构体age
void test2()
{struct stu arr[3] = { {"zhangsan",20},{"lisi",19},{"wangwu",18} };int sz = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, sz, sizeof(arr[0]), cmp_struct);//打印int i = 0;for (i = 0; i < 3; i++){printf("%s %d\n", arr[i].name, arr[i].age);}
}int main()
{//实现qsort模拟之排序结构体agetest2();return 0;
}

💤结束语🎉🎉🎉

今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小说给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。
在这里插入图片描述

这篇关于快快快快快快快快快快排的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/405998

相关文章

这个文章,不容错过,快快查阅!!

精彩大集合,不要错过每一个《springboot》 关键字:springboot别闹了,你还在手写后台校验?试试Spring的这个注解吧!https://mp.weixin.qq.com/s/aZh6wXKBlK_12TmEBn92PA

2024抖音小店最新注册流程来了,快快收藏!

大家好,我是电商糖果 2024年想开一家抖音小店,但是不知道具体的开店流程。 不要着急,这篇文章就给大家详细的讲解一下。 首先,准备开店材料:5000左右的类目保证金,电脑,手机号,法人银行卡,个体户营业执照。 东西备齐之后,下面就正式进入开店环节了。 第一步:官网注册 电脑浏览器搜索“抖音小店”官网,点击立即入驻,然后输入自己的手机号。 记住不要使用抖音号,头条号注册。

弹性云服务器性能对比(内附测试数据),快快网络服务器崭露头角

随着计算技术的不断革新,云服务器已成为企业和个人部署应用与服务的首选。尤其线上业务日益盛行的今天,云服务商的实力更是备受瞩目。对于企业而言,高稳定,存储速度都是不可或缺的基本要求,这些都对公有云的云端编解码能力、带宽资源以及网络质量提出了极高的挑战。 为了深入了解当前云服务商的实际表现,我们对阿里云、腾讯云、华为云和快快网络进行了详细的测评。为了确保测评的公正性和准确性,我们采用了标准化配置

办公族久坐对颈椎不好,快快试试这个体操吧

长期的电脑办公工作让我换上的颈椎病,苦恼的很,手麻严重,后来遇到一些同行,发现这已成为现在社会常见病,因为缺乏四肢的运动。长期久坐会导致各类疾病。一个做cg动画的网友推荐了一套道家全真派传人张志顺老人家的八部金刚动作功法。老人家已经仙逝,逝年100多岁,足以证明老人家惜福养生的生活习惯的科学性了,开始以为这部动作体操很难学,后来才发现非常容易做,对于全身筋骨都活动到了。是一部类似广播体操的动作。还

快快销shop积分商城:全额积分抵扣营销 打造积分换购专区

快快销shop积分商城是一个创新的营销平台,它通过全额积分抵扣的策略,鼓励用户在商城内消费并积累积分。这种营销方式不仅能提升用户的购物体验,还能有效地促进销售。 全额积分抵扣意味着用户在商城内消费时,可以全额使用积分进行抵扣,无需额外支付现金。这种策略极大地刺激了用户的购买欲望,因为用户可以充分利用积分,以更低的价格购买商品。此外,用户在商城内消费时,还能获得额外

快快销ShopMatrix 分销商城多端uniapp可编译5端-代理商收益管理:差价奖励和销售额统计

代理商收益管理是一种针对代理商的利润分配模式,主要通过差价奖励和销售额统计来实现。这种模式的核心思想是通过激励代理商的销售行为,提高代理商的积极性和销售效率,从而实现整个销售网络的增长。 差价奖励是代理商收益管理中的一种常见方式。它是指代理商在销售商品时,可以获得一定比例的差价作为奖励。这个差价可以是商品售价与进价之间的差额,也可以是商品售价与成本之间的差额。通过给

绘制自己组合的k线图_股票K线图入门70种经典的K线组合形态(史上最全),快快拿走!...

炒股必须要学会四件事和掌握一个前提: 一是止损;二要学会选股;三是止盈;四要适时空仓。 一个前提:任何时候都要看看大盘。 止损为什么这么难?有哪些方法可以止损呢? 1、把损失看成失败; 2、害怕刚止损出来,股价就掉头回去; 3、连续几次碰到“刚止损出来,股价就调头回去”的现象; 4、还是很喜欢手上的仓位,或者说不确信当前趋势是否已经翻转了; 5、有时候不止损,股价还真的调头回去了,让交易员占个

一套互联网公司理想架构,快快收藏。。

来源:https://juejin.cn/post/6844904054921887757 互联网理想架构 本文探讨了互联网公司的技术架构,涉及DNS、负载均衡、长连接、API网关、PUSH推送、微服务、分布式事务以及相关支撑的基础服务。主要是为了学习,希望可以给大家一个参考。 整体架构 APP、PC以及第三方等调用方通过传统的域名解析服务LocalDNS获取负载均衡器的IP,APP可

度盘快快下载

一.下载: http://dt2.8tupian.net/2/29913a11b1000.pg3 二. 介绍:运行低版本的某度PC软件,点击要下载的资源,运行加速器,即可。备注:不要看进度和现实的速度,观察下载的文件大小的变化。