qsort对各数据类型的测试样例

本文详细介绍了qsort函数的应用,包括对整数数组、字符数组、字符串数组及结构体数组的排序,并提供了完整的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//挺有收获的

//qsort Demo

#include <iostream>
#include <cstdlib>	//qsort 
#include <cstring>
using namespace std;

int cmp_int(const void *a,const void *b)
{
	return *(int *)a - *(int *)b;
}

int cmp_char(const void *a,const void *b)
{
	return *(char *)a - *(char *)b;
}

int cmp_string(const void *a,const void *b)
{
	return strcmp((char*)a,(char *)b);
}

 struct Node
 {
 	int x,y;
 };
	 
int cmp_struct1(const void *a,const void *b)	//对结构体一级排序(按结构体中的某个关键字排序) 
{
	return (*(Node*)a).x > (*(Node*)b).x ? 1 :-1; 
}

int cmp_struct2(const void *a,const void *b)	//对结构体二级排序(按照x从小到大比较 , 
{												//当x相等时按y从大到小比较) 
	struct Node *c = (Node *)a;
	struct Node *d = (Node *)b;
	if(c->x!=d->x)
		return c->x - d->x;
	else
		return c->y - d->y;
}

int main()
{
	//测试qsort对整数排序
	int arr[6] = {5,3,12,8,1,9};
	qsort(arr,6,sizeof(int),cmp_int);
	for(int i=0;i<6;i++)
	{
		cout<<arr[i]<<" "; 
	}
	cout<<endl;
	
	//测试qsort对char进行排序
	char ch[6] = {'v','a','w','k','z','c'};
	qsort(ch,6,sizeof(char),cmp_char);
	for(int i=0;i<6;i++)
	{
		cout<<ch[i]<<" ";
	}
	cout<<endl;
	
	//测试qsort对字符串排序
	char str[100][10]= {"abc","cdf","ckg","mvc","java","oracle"};
	qsort(str,6,sizeof(str[0]),cmp_string); 
	for(int i=0;i<6;i++)
	{
		cout<<str[i]<<" ";
	}
	cout<<endl; 
	
	//测试qsort对结构体的一级排序	(按x域的大小排的顺序) 
	struct Node node[100] ={
	 	{12,15},{30,25},
	 	{20,8},{28,10},
		{35,5} ,{30,10}
	 };
	 
	 qsort(node,6,sizeof(node[0]),cmp_struct1);
	 for(int i=0;i<6;i++)
	 {
	 	cout<<node[i].x<<" "<<node[i].y<<"\t";
	 }
	 cout<<endl; 
	 
	 //测试qsort对结构体的二级排序 
		struct Node node2[100] ={
		{12,15},{30,25},
		{20,16},{20,10},
		{35,5} ,{30,10},
		{32,6},{35,50}
	 };
	 
	 qsort(node2,8,sizeof(node2[0]),cmp_struct2);
	 for(int i=0;i<8;i++)
	 {
	 	cout<<node2[i].x<<" "<<node2[i].y<<"\t";
	 }
	 cout<<endl; 
	return 0;
}


某协议的数据包在发送时会被分为若干数据分段,接收到的数据分段dataFragments可能出现重复、丢失、乱序。 每个数据分段dataFragments[i]的组成格式为:[数据类型, 分段序号, 结束标志, 内容长度, 净荷内容] 数据类型:数据分段的数据类型,取值范围[0,9] 分段序号:数据分段在数据包中的序号,取值范围[0,100000] 结束标志:表示此数据分段是否为数据包的最后一个分段,是为1,否为0 净荷长度:净荷内容的长度,取值范围[2,5] 净荷内容:此数据分段的实际内容 现给定一批接收到的数据分段和某一数据类型dstType,请重组该数据类型的数据包,重组及输出的规则如下: 成功重组必须是完整的数据:“分段序号”从0开始且是连续的,并且仅序号最大的数据分段的“结束标志”为1。 如果能成功重组,按“分段序号”升序,将该数据类型的“净荷内容”,拼接为一个字符串并输出。如果分段序号有重复则去重。 如果不能成功重组,则输出字符串NA。 解答要求 时间限制: C/C++ 1000ms, 其他语言:2000ms 内存限制: C/C++ 256MB, 其他语言:512MB 输入 首行输入数据分段数组 dataFragments,1 <= dataFragments.length <= 1000000 第二行是一个整数 dstType,代表需要重组的数据类型。 注意:用例保证每个数据分段的内容都符合格式和范围要求,重复的数据分段保证整体是完全一样的,并且某数据类型的“结束标志” 1 仅可能出现在序号最大的数据分段。 输出 重组后的数据包内容,或字符串 "NA"。 样例1 复制输入: [[0, 1, 0, 5, "hello"], [1, 2, 1, 2, "CC"], [0, 3, 1, 5, "world"], [0, 0, 0, 3, "Say"], [1, 0, 0, 2, "AA"], [0, 2, 0, 2, "to"], [1, 1, 0, 2, "BB"]] 0 复制输出: "Sayhellotoworld" 解释: 数据分段0 1 0 5 hello,表示属于0号数据类型,分段序号为1,结束标志位0,净荷长度为5,净荷内容为 hello。 最后一行输入0,表示需要重组0号数据类型的数据包。 0号数据类型的数据分段有0 1 0 5 hello, 0 3 1 5 world, 0 0 0 3 Say, 0 2 0 2 to,按分段序号顺序重组,遇到结束标志1停止,则重组后的输出为 "Sayhellotoworld"。 样例2 复制输入: [[9, 2, 1, 5, "world"], [9, 1, 0, 5, "hello"]] 9 复制输出: "NA" 解释: 分段序号缺少0,所以输出 "NA" 把这道题用c做一下,先详细给出思路,再给出代码,代码最好每行都有注释
最新发布
08-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值