问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...想用qsort这样的系统自带函数给一个二维数组的某一横行排序怎么做...

发布网友 发布时间:2024-10-21 20:31

我来回答

2个回答

热心网友 时间:2024-10-23 02:09

qsort是编译器函数库自带的快速排序函数。其原型为:

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

参数含义如下:

base: 待排序数组首地址。

num: 数组中待排序元素数量。

width: 各元素的占用空间大小。

compare: 指向函数的指针,用于确定排序的顺序。

比较难以理解的是compare函数指针,其确定了如何去排序,通过修改该函数指针指向的函数体,可以对复杂类型进行排序,如结构体等。 也可以改变排序方式,如升序或降序。


要达到问题中的效果,需要在第一个参数传入数据所在行的首地址,第二个参数传入一行中元素的个数,第三行传入每个元素占用的空间,第四个传入自定义的比较函数指针(函数名)。


下面就以一个3行4列整型数组a[3][4],对其第二行(a[1])进行升序排序为例,写一个代码,辅助理解。

#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b)
{
return *((int *)a) > *((int *)b);//由于是整型数组,所以将指针转为整型指针后取值,再比较。
}
int main()
{
int a[3][4] = 
{
5,1,54,6,
22,12,44,32,
34,5,2,1
};//定义的原始数组,可以看到是乱序的。
int i,j;

qsort(a[1], 4, sizeof(int), cmp);

//以下代码输出数组元素值,以验证排序结果。
for(i = 0; i < 3; i ++)
{
for(j = 0; j < 4; j ++)
printf("%3d",a[i][j]);
printf("\n");
}
return 0;
}

程序运行后输出:

  5  1 54  6
 12 22 32 44
 34  5  2  1

可以看到第二行已经升序排列,而其它两个没有变化。

热心网友 时间:2024-10-23 02:05

#include<iostream>
#include<algorithm>
using namespace std;

const int M=3; //二维数组行数
const int N=4; //二维数组列数

int cmp( const void *a , const void *b ) //排序规则

    if(*(int*)a!=0&&*(int*)b!=0)  //如果不是0,则参与排序
return*(int*)a-*(int*)b;


int main()
{
int a[M][N]={{13,12,0,0},{15,14,0,0},{18,19,22,23}};
int b[M*N];  //定义一个一维数组做临时存储
int k =0;
for(int i=0; i<M; i++)  //二维数组转化成一维数组
for(int j=0; j<N; j++)
{
b[k]=a[i][j];
k++;
}
for(int i=0; i<M; i++)
qsort(b+(i*N),N,sizeof(int),cmp);//分段排序
k=0;
for(int i=0; i<M; i++)  //将一维数组赋值给原二维数组
{
for(int j=0; j<N; j++)
{
a[i][j]=b[k];
k++;
cout<<a[i][j]<<"\t";
}
cout<<endl;
}
return 0;
}

如果不是一定不用一维数组的话,如果不是一定不用C++的话,这个可以参考。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
儿歌祖国妈妈我爱你是谁写的汇总28句 为什么有的人学几何很厉害数学却不行 一个人数学几何好,但是其他计算方面的都马马虎虎,那么说明这个人怎么... 数学几何好的人,就是一道几何题很快就能想出来的人是不很聪明?这能练... 固安尚城国际怎么样 驾驶员咨询服务营业执照经营范围怎么写 驾校属于什么经营范围 核桃粉保质期多长时间 亿生康宝筋骨冷敷凝胶只在国内销售吗? 清河镇概况 qsort函数对相同长度的字符串进行strcmp操作时候是如何排序的? ...调用 qsort() 对一个字符串数组排序, 但是不行。 ...买的,有发票,价格比京东官方店便宜200。这个显卡能不能 冬季为什么也老上火啊? 冬季更易上火 这些情况要小心 广州暂住证要多少钱 广州办理居住证要多少钱? ...今天看网站介绍,发现一个叫"星辰碎片"和"艾露恩的赐福"的法术,可我... wow 暗夜精灵牧师 WOW中牧师的职业 空调内机右侧今天一直漏水,是不是排水管堵住了怎么修 空调内机右侧今天一直漏水,是不是排水管堵住? 问道体木和力金怎么加点和五行还有装备和宠物选择(木我想玩带毒攻... 空调漏水是排水管有问题吗-空调漏水是不是排水管堵住了 上海松江茸梅路237号9号线到那一站 海尔的热水器怎么调水温? ...每千克售价3.6元;其次是二等苹果,每千克售价2.8 水果店今天销售两种水果共4280元苹果每千克3.6元菠萝每千克2.8元已知卖 ... 室内环境对人体的危害 ...已知苹果每千克3.6元,桃子每千克2.8元。苹果和桃子各买了多少千克... 为什么Excel在运行中突然卡死? 小华折了30朵红花,是黄花数量的2/5,黄花有多少朵? 请问金山毒霸网购敢赔险8000元是免费领取?领取完是什么情况?这8000元... 纪念白求恩出现的多音字 新文化运动反对白话文吗 爸爸不在美国,赴美生子妈妈们怎么给宝宝办理ds3053表格和委托书的公证... 社保补缴记录可以消除吗? 北京考研社保有补缴记录怎么办 北京,公司整体缓缴社保2个月,后又由公司补齐。个人的社保记录算是... 北京2011年补缴社保后,今年未收到2011年度社保对账单,区里的社保还不... 真倒霉,我在北京缴纳一年多社保,中间断档一年,我负担不起补缴费用,新公... 身份证注册的手机号码欠费注销后还会不会继续扣费?PS:别人拨打进来说是... ...奥斯汀DVD中英字幕高清晰1280×720版种子下载,谢恩公! ...现在老公被拘留半年,老板被抓。老公会怎么判 萨摩换毛吃什么好 卖手抓饼需要手抓饼酱吗 杨氏太极拳渊源 好好生活的温柔干净文案句子(正能量的经典短句) ...螫一样 然后虫子体液好像也有毒 请问是什么东西 有什么得方法消灭... 安室透的日常在哪看