c语言sort函数c语言 ,编写一个函数input(),sort(),实现数组的输入,排序。

c语言sort函数  时间:2021-06-06  阅读:()

这个c语言程序中的sort函数为什么没有或者不需要返回值

因为这里,数组的传递本身就是地址,所以,在sort里面,对数组的操作影响到调用地方的数组的值,而这正是需要的,所以sort不需要返回值,如果你还需要其他信息需要sort返回,可以使用返回值。



C语言 排序 函数

一群菜鸟不懂的乱说。

我把楼主的代码改了一些,如下

#include<stdio.h>

int input(int data[], int argc, int *n) { int i; printf("请输入要输入数的个数"); scanf("%d", n); if(*n > argc) { printf("segment fault!"); return -1; } for(i = 0; i < *n; i++) { printf("输入的第%d个数.", i+1); scanf("%d", data+i); //canf("%d", &data[i]); } printf("输入的数是: "); for(i = 0; i < *n; i++) { printf("%5d ", data[i]); } return 0; }

void sort(int n, int data[]) { int i, j, temp; for(i = 0; i < n-1; i++) { for(j = i+1; j < n; j++) if(data[i] < data[j]) { temp = data[i]; data[i] = data[j]; data[j] = temp; } } printf("排序后的结果如下: "); for(i = 0; i < n; i++) printf("%5d ", data[i]); }

int main() { int data[100]; int n; if(input(data, 100, &n) == -1) return -1; sort(n, data); return 0; }

对于以上代码,做出如下解释:

(1)C语言的参数有形参和实参的说法,形参在传递到函数内的时候,复制一个副本给函数,在函数内部和外部是两个完全不同的变量,函数结束,空间也被释放,所以不能在函数内部来改变外部的值。

所以要像楼主这样用一个函数给一个变量赋值,要用实参int input(int data[], int argc, int *n)中的int *n就是实现形式,这种办法把n的地址传递给函数。

当然,在调用函数的时候也同样要传递地址指针类型(&n)。

(2)

if(*n > argc) { printf("segment fault!"); return -1; }

这一段是我加进去的,因为按照楼主的意思,data数组的长度也要传递进去,但是意思何在?所以只好加了这一段,并把函数改为有类型的,以检验是否有数据溢出。

(3)scanf("%d", data+i); //scanf("%d", &data[i]);

这里我改动的主要原因是为了提升程序速度,scanf("%d", &data[i]);同样可以运行,但是寻址一次,又回头要地址,这样绕了一圈,没有必要。

对于楼主提几点建议:

(1)C语言的精髓在于指针,刚才说到的实参,就是用指针的概念实现的。

scanf("%d", data+i); 一行,同样也是把数组头指针加上偏移地址,得到所要的地址。

(2)C语言编程的时候特别要注意数据的溢出,这是所有初学者头疼的问题之一。

建议在一开始就养成习惯,经常检验数组的边界。

(3)void main一看就知道是看潭浩强的书长大的程序员。

建议我们都用int main(){ return 0; }的形式,可以看看C语言之父K&R的书。

主函数的返回值是告诉操作系统,这个函数是正常退出(返回0),还是异常退出(非0,经常是-1)。

(4)在做实际项目的时候,程序经常是要回头看的,也经常是要给别人看以达到维护的目的的。

除了要养成良好的文档书写习惯以外(学习软件工程以后你就会掌握),还要养成良好的编程风格,这里我建议看《thinking in C++》,并按照里面例题的风格,养成自己的习惯。

c语言 ,编写一个函数input(),sort(),实现数组的输入,排序。

input()里面的输入的数据存放在数组中,只要在调用sort()的时候使用数组作为参数就可以!例如下题: //从键盘输入n(1<n<=10)个数据,并对这n个数据从小到大排序 #include<stdio.h> void main() { int i,n,a[10]; void input(int a[],int n); void sort(int a[],int n); printf("请输入数据的个数n:"); scanf("%d",&n); input(a,n); sort(a,n); printf("排序结果:"); for(i=0;i<n;i++) printf("%6d",a[i]); printf(" "); } void input(int a[],int n) { int i; printf("请输入n个数据:",n); for(i=0;i<n;i++) scanf("%d",&a[i]); } void sort(int a[],int n)//选择法排序 {int t,index,k,i; for(k=0;k<n-1;k++) {index=k; for(i=k+1;i<n;i++) if(a[index]>a[i])index=i; t=a[index];a[index]=a[k];a[k]=t; }}

10gbiz($2.36/月),香港/洛杉矶CN2 GIA线路VPS,香港/日本独立服务器

10gbiz发布了9月优惠方案,针对VPS、独立服务器、站群服务器、高防服务器等均提供了一系列优惠方面,其中香港/洛杉矶CN2 GIA线路VPS主机4折优惠继续,优惠后最低每月仅2.36美元起;日本/香港独立服务器提供特价款首月1.5折27.43美元起;站群/G口服务器首月半价,高防服务器永久8.5折等。这是一家成立于2020年的主机商,提供包括独立服务器租用和VPS主机等产品,数据中心包括美国洛...

数脉科技:香港服务器低至350元/月;阿里云CN2+BGP线路,带宽10M30M50M100M

数脉科技(shuhost)8月促销:香港独立服务器,自营BGP、CN2+BGP、阿里云线路,新客立减400港币/月,老用户按照优惠码减免!香港服务器带宽可选10Mbps、30Mbps、50Mbps、100Mbps带宽,支持中文本Windows、Linux等系统。数脉香港特价阿里云10MbpsCN2,e3-1230v2,16G内存,1T HDD 或 240G SSD,10Mbps带宽,IPv41个,...

国内云服务器 1核 2G 2M 15元/月 萤光云

标题【萤光云双十二 全场6折 15元/月 续费同价】今天站长给大家推荐一家国内云厂商的双十二活动。萤光云总部位于福建福州,其成立于2002 年。主打高防云服务器产品,主要提供福州、北京、上海 BGP 和香港 CN2 节点。萤光云的高防云服务器自带 50G 防御,适合高防建站、游戏高防等业务。这家厂商本次双十二算是性价比很高了。全线产品6折,上海 BGP 云服务器折扣更大 5.5 折(测试了一下是金...

c语言sort函数为你推荐
orderbydescvf中的order by 3 desc 是什么意思自定义表情qq自定义表情防火墙排名什么防火墙最好模式识别算法研究生研究方向:数据挖掘、模式识别、启发算法这三者哪个有前途网络电话永久免费打有没有永久免费的网络电话腾讯技术腾讯是什么东西?asp大马一句话木马中的大马和小马的作用各是什么?assemblyinfocsgo很跟cs有什么区别微软操作系统下载微软的系统到哪下载labelforhtml标签中lable的for属性有什么作用?
com域名 大庆服务器租用 virpus pccw themeforest 韩国电信 patcha 国外php空间 150邮箱 e蜗牛 52测评网 域名转接 佛山高防服务器 百度云1t 免费测手机号 hdd 爱奇艺vip免费领取 绍兴电信 香港新世界中心 江苏双线服务器 更多