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; }}

Ceranetworks顶级合作伙伴 香港E3 16G 299元 香港E5 32G 650元 美国E3 16G 650元

提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...

美国服务器20G防御 50G防御 688元CN2回国

全球领先的IDC服务商华纳云“美国服务器”正式发售啦~~~~此次上线的美国服务器包含美国云服务器、美国服务器、美国高防服务器以及美国高防云服务器。针对此次美国服务器新品上线,华纳云也推出了史无前例的超低活动力度。美国云服务器低至3折,1核1G5M低至24元/月,20G DDos防御的美国服务器低至688元/月,年付再送2个月,两年送4个月,三年送6个月,且永久续费同价,更多款高性价比配置供您选择。...

HostYun:联通AS9929线路,最低月付18元起,最高500Mbps带宽,洛杉矶机房

最近AS9929线路比较火,联通A网,对标电信CN2,HostYun也推出了走联通AS9929线路的VPS主机,基于KVM架构,开设在洛杉矶机房,采用SSD硬盘,分为入门和高带宽型,最高提供500Mbps带宽,可使用9折优惠码,最低每月仅18元起。这是一家成立于2008年的VPS主机品牌,原主机分享组织(hostshare.cn),商家以提供低端廉价VPS产品而广为人知,是小成本投入学习练手首选。...

c语言sort函数为你推荐
svn服务器搭建如何在本机搭建SVN服务器知识分享平台微信看到一些文章,可以分享到知识付费的平台吗?怎么操作呀?数据监测毕业论文检测,万方数据检测结果可靠吗?跟知网的有多少差距啊?求以往学长学姐解释。y码女款衣服XXL、XL、XXXL尺码分别是多大?腾讯公告腾讯出什么事了 所有QQ用户空间农场什么的都打不开 有的连空间都进不去 又受攻击了?天翼校园宽带校园天翼宽带是什么上网类型审计平台审计软件的产品介绍中信银行理财宝中信银行理财宝金卡怎样激活收费视频微信里的视频通话是怎么收费 ?山东省教育云平台服务山东教育云平台怎么这么烂
河南vps 美国vps评测 山东vps blackfriday BWH mobaxterm 中国智能物流骨干网 免费个人空间申请 股票老左 135邮箱 爱奇艺vip免费领取 国外ip加速器 登陆空间 阿里云免费邮箱 国外的代理服务器 iki lamp架构 789电视剧网 博客域名 tracker服务器 更多