用选择法对数组中10个整数按由小到大排序

解题思路:
        所谓选择法就是先将10个数中最小的数与a[0]对换;再将a[1]~a[9]中最小的数与a[1]对换……每比较一轮,找出一个未经排序的数中最小的一个。共比较9轮。可以用数组名作函数参数,此时实参与形参都用数组名(也可以用指针变量)。

编写程序:

运行结果:

程序分析:
        可以看到,调用函数"select_sort(a,10);"之前和之后,a数组中各元素的值是不同的。原来是无序的,执行"select_sort(a,10);"后,a数组已经排好序了,这是由于形参数组array已用选择法进行排序了,形参数组改变也使实参数组随之改变。
        在执行 select_sort 函数中的for循环时,当i为0时,将array[0]与array[1]-array[9]比较,只要发现某一个数组元素array[j]的值大于array[0],就将它的下标j存放在变量k中,执行完内循环(j循环)后,k中存放的是array[1]-array[9]中最大数的下标,然后将该元素与array[0]对换。当执行第2次外循环时,i等于1,将array[1]与array[2]~array[9]比较,最后将array[2]~array[9]中最大数与array[1]对换,以此类推。

        对数组名作函数参数的说明:
        (1)如果函数实参是数组名,形参也应为数组名(或指针变量,关于指针见第6章),形参不能声明为普通变量(如int array;)。实参数组与形参数组类型应一致(今都为int 型),如不一致,结果将出错。
        (2)需要特别说明的是:数组名代表数组首元素的地址,并不代表数组中的全部元素。因此用数组名作函数实参时,不是把实参数组各元素的值传递给形参,而只是将实参数组首元素的地址传递给形参。形参可以是数组名,也可以是指针变量,它们用来接收实参传来的地址。如果形参是数组名,它代表的是形参数组首元素的地址。在调用函数时,将实参数组首元素的地址传递给形参数组名。这样,实参数组和形参数组就共占同一段内存单元。
        在用变量作函数参数时,只能将实参变量的值传给形参变量,在调用函数过程中如果改变了形参的值,对实参没有影响,即实参的值不因形参的值改变而改变。而用数组名作函数实参时,如果改变了形参数组元素的值将同时改变实参数组元素的值。在程序设计中往往有意识地利用这一特点改变实参数组元素的值。
        实际上,声明形参数组并不意味着真正建立一个包含若干元素的数组,在调用函数时也不对它分配存储单元,只是用array[ ]这样的形式表示array是一维数组的名字,用来接收实参传来的地址。因此array[ ]中方括号内的数值并无实际作用,编译系统对一维数组方括号内的内容不予处理。形参一维数组的声明中可以写元素个数,也可以不写。函数首部的下面几种写法都合法,作用相同。
        void select_sort(int array[10],int n)        //指定数组元素个数与实参数组相同
        void select_sort(int array[ ],int n)           //不指定元素个数
        void select_sort(int array[5],int n)          //指定元素个数与实参数组不同
        C++实际上只把形参数组名作为一个指针变量来处理,用来接收从实参传过来的地址。前面提到的一些现象都是由此而产生的。
        如果是三维或更多维的数组,处理方法是类似的。

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值