C语言 结构体数组排序问题

C语言 结构体数组排序问题,第1张

标准C是不支持你这种变量定义动态数组

struct item all[N]; 这达不到你想要的效果!需要定义成指针,然后malloc

int i,j;

printf("请输入%d组信息:\n",N);

struct item all ;

int i,j;

printf("请输入%d组信息:\n",N);

all=(struct item )malloc(sizeof(struct item)N ) ;

以下代码不变,文件头加上库函数头文件 #include <stdlibh>

你说matlab吗?

里面有个参数,可以用:

sort(a,'ascend')%升序

sort(a,'descend')%降序;

a为向量或数组

也可以这样:先对a求相反数,成-a,然后升序,然后再求相反数(这只是很简单的数学技巧!在编程时相当有用!)

如果你是C语言,我记得没有函数你可以自己写用一些排序算法实现

你好,

第一个参数是要排序的缓冲区,比如一个数组,第二个参数给出了数组的大小,第三个参数给出了数组中每个元素以字节为单位的大小,最后一个是一个函数,这个函数返回值是大于零的数或者返回零。如果compare函数的第一个参数所指数据大于第二个参数所指数据,则返回大于零的值,如果第一个参数所指数据等于第二个参数所指数据,则返回零。小于则返回负数。

c语言没有模板,针对不同类型的数组排序,需要不同的compare函数,下面是两个例子:

对int型数组排序:

int num[100];

int cmp(const void a,const void b)

{

return (int)a-(int)b;

}

qsort(num,100,sizeof(num[0]),cmp);

对char类型数组排序(同int类型)

char word[100];

int cmp( const void a , const void b )

{

return (char )a - (int )b;

}

qsort(word,100,sizeof(word[0]),cmp);

随机数

文件写入

排序

这三个模块即可

大体实现 如下

#include <stdioh>

#include <timeh>

#include <stdlibh>

#define N 10000

void sort(int a)

{

}

main()

{

int a[N],i;

FILE fp;

srand(time(NULL));

for(i=0;i<N;i++)

a[i]=rand()%10000+1;//随机数

sort(a);//排序

fp=fopen("atxt","w");

for(i=0;i<N;i++)

fprintf(fp,"%4d",a[i]);

fclose(fp);

}

//要求任意输入10个数,然后按从小到大顺序输出

#include&lt;stdioh&gt;

int main()

{

int a[10];

int i,j;

int temp;

printf("请输入10个整数:");

for(i=0;i&lt;10;i++)

{

scanf("%d",&a&lt;i&gt;);

}

for(i=0;i&lt;9;i++)

{

for(j=0;j&lt;9-i;j++)

{

if(a[j]&gt;a[j+1])

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

}

}

printf("排列后顺序为:");

for(i=0;i&lt;10;i++)

{

printf("%d",a&lt;i&gt;);

}

printf("\n");

return 0;

}

扩展资料:

①printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。

格式输出,它是c语言中产生格式化输出的函数(在stdioh中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。

要输出的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。

简单点理解就是,在一段程序中你正确使用该函数,可以在该程序运行的时候输出你所需要的内容。

②printf函数是一个标准库函数,它的函数原型在头文件“stdioh”中。但作为一个特例,不要求在使用printf函数之前必须包含stdioh文件。

printf()函数的调用格式为:printf("&lt;格式化字符串&gt;",&lt;参量表&gt;)。

其中格式化字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。

#include <stdioh>

#define N 20

void input(int b[], int q);

void print(int b[], int q);

void sort(int b[], int q);

void slect_move_input(int b[], int q, int x1, int y1);

main()

{

int a[N], n, x, y, count=1;

printf("输入数组的长度:");

scanf("%d", &n);

input(a, n);

print(a, n);

printf("\n");

sort(a, n);

while(count>0)

{

printf("\n输入要查找的数:");

scanf("%d", &x);

printf("\n输入你想插入的数:");

scanf("%d", &y);

slect_move_input(a, n, x, y);

printf("\n输入一个大于零的整数继续\n否则输入一个小于零的整数:");

scanf("%d", &count);

}

}

void input(int b[], int q)

{

int i;

for(i=0; i<q; i++)

scanf("%d", &b[i]);

}

void print(int b[], int q)

{

int i;

for(i=0; i<q; i++)

printf("%d\t", b[i]);

}

void sort(int b[], int q)

{

int i, j, t;

for(i=1; i<q; i++)

{

for(j=0; j<q-i; j++)

{

if(b[j]>b[j+1])

{

t=b[j]; b[j]=b[j+1]; b[j+1]=t;

}

}

}

print(b, q);

}

void slect_move_input(int b[], int q, int x1, int y1)

{

int i, d=1;

for(i=0; i<q; i++)

{

if(b[i]==x1)

{

b[i]=y1;

d=0;

}

}

if(d) printf("没有你要查找的数!");

else sort(b, q);

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13494811.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存