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

无忧云:洛阳/大连BGP云服务器38.4元/月,雅安物理机服务器315元/月起,香港荃湾CN2限时5折优惠

无忧云怎么样?无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点,目前商家开启了夏日清凉补贴活动,商家的机器还是非常...

LOCVPS-2021年6月香港便宜vps宽带升级,充值就送代金券,其它八折优惠!

LOCVPS怎么样?LOCVPS是一家成立于2011年的稳定老牌国人商家,目前提供中国香港、韩国、美国、日本、新加坡、德国、荷兰等区域VPS服务器,所有机房Ping延迟低,国内速度优秀,非常适合建站和远程办公,所有机房Ping延迟低,国内速度优秀,非常适合做站。XEN架构产品的特点是小带宽无限流量、不超售!KVM架构是目前比较流行的虚拟化技术,大带宽,生态发展比较全面!所有大家可以根据自己业务需求...

无忧云(25元/月),国内BGP高防云服务器 2核2G5M

无忧云官网无忧云怎么样 无忧云服务器好不好 无忧云值不值得购买 无忧云,无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免北岸建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高...

c语言sort函数为你推荐
宝应中学宝应初级中学有哪些企业资源管理系统企业资源计划(ERP) 急!!!vga接口定义主板上的VGA接口有什么用?扫图问个非常白痴的问题撒,扫图是什么意思?自定义表情搜狗输入法怎么添加自定义表情模式识别算法机器学习和模式识别有什么区别?看教材,发现它们的算法都差不多一样啊。。。jstz泰州哪里有民工市场腾讯技术腾讯QQ是谁研发的?在那一年上市的?天翼校园宽带天翼校园宽带怎么样用手机打开这个页面登陆papertiger亚瑟士 艾斯克斯 tiger有什么区别吗
备案域名购买 lamp openv lunarpages seovip 500m空间 韩国网名大全 777te 上海电信测速 云服务器比较 服务器论坛 广东主机托管 godaddy空间 架设代理服务器 服务器机柜 nic 连连支付 卡巴斯基官方下载 paypal兑换 更多