选择排序这里也用到了冒泡排序的写法。
由题说明,用指针方法对10个整数按由大到小顺序排序。
首先声明选择排序基本和冒泡排序法一样,只不过多加了一个调用函数环节。在后面会说明我的错误电点,同时我也会在另一篇冒泡排序中详细文字叙述效果图和代码可参照本文。
代码如下
`#include<stdio.h>
void swap(int arry,int n)
{
int tempt,t,i,j,a;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
{
if(arry[j]<arry[j+1])
{
tempt=(arry+j);
(arry+j)=(arry+j+1);
*(arry+j+1)=tempt;
}
}
}
int main()
{
int i,j,a[10]={1,4,2,5,7,3,0,9,8,6};
int p=a;
swap(p,10);
for(i=0;i<10;i++)
printf("%d",p++);
}`
效果图
此次进行选择排序,错误点如下:
1.对swap函数形参的定义错误,这也提示我要再看看相关知识了。我第一次是
swap(int x,int y)因为我感觉在主函数中swap传递的是一个值,在这种情况下编译器爆出“下标值既不是指针又不是数组”的错误,想到可能在这个函数中没有定义数组于是在swap函数中定义了一个,但报错未消失,接着找到了原因在实参为数组形式,接收的形参也应该为这种形式,也不仅限于数组,这是第一个错误。
2.在敲代码之前我有想过我输送过去的值只有一个,怎么将这个数组那么多的值调换,其实输送过去的值只是一个引子,实际上是将a【10】这个数组传递给形参,这也是在调用函数中通过形参可以改变实参的值的原因。
3.对于打擂台法也就是冒泡排序进行顺序输出,一开始有点不知道在具体几趟中再循环比较几次,这个其实是在走了几趟后,每一趟都代表浮出一个除上一躺的最大值,总趟数是n-1,因为最后一个数不用比了;每一趟都代表浮出一个除上一躺的最大值,i是第几躺,所以是n躺-i为所要进行的比较次数。
4.这个纯脑袋不清楚(刚上完课)结果经典三步换值搞错了。