【C语言】如果想用qsort这样的系统自带函数给一个二维数组的某一横行排序怎么做?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【C语言】如果想用qsort这样的系统自带函数给一个二维数组的某一横行排序怎么做?相关的知识,希望对你有一定的参考价值。
比如下面这个:
13 12 0 0
15 14 0 0
18 19 22 23
如何排成:
12 13 0 0
14 15 0 0
18 19 22 23
要求原先是0的项要忽略不进行排序...
多谢!!!
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;
程序运行后输出:
12 22 32 44
34 5 2 1
可以看到第二行已经升序排列,而其它两个没有变化。
参考技术A #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++的话,这个可以参考。
本回答被提问者采纳C语言之qsort函数进行排序
目录
qsort()介绍
qsort()为库函数
全称:quick sort快速排序,因此qsort函数用的是快速排序,头文件为stdlib.h
用qsort()实现排序功能,qsort()可以对整型数组,字符串数组,结构体数组等任意数据进行排序
qsort()函数定义
其中cmp是一个函数指针,函数指针的意思是指向一个函数的指针,qsort通过cmp指向不同的函数就可以实现如何比较,比如是从大到小排序还是从小到大排序
qsort()函数的使用
对整型数据进行排序
运行结果:
排序结构体数据
通过调试窗口查看s的变化
使用sort_by_age排序
使用sort_by_name排序
使用冒泡排序模拟实现qsort()函数
运行结果
以上是关于【C语言】如果想用qsort这样的系统自带函数给一个二维数组的某一横行排序怎么做?的主要内容,如果未能解决你的问题,请参考以下文章