关于排序函数的问题


众所周知,自定义函数之间的参数引用传值传地址,
即直接在函数中改变变量的值是没有任何意义的,当你跳出该自定义函数后,你所传入的变量值仍然没有做任何改变。
所以需要引入一种能够真正改变变量数值的变量,使要改变的变量在自定义函数改变后不会回到原来未进入自定义函数时的值。
所以这里要用到指针。
到底什么是指针这里就不说了。网上有好多不过还是建议看看书,看几节网课估计就理解个差不多了。
好了,进入今天的正题。今天主要讲怎样编写一个用来排序的自定义函数。
使其即使跳出自定义函数,其值依然是自定义函数排列好的顺序。
#include<stdio.h>//这里以长度为6的数组为例,改变长度只需稍加改变,如果切实需要评论区回复,小陈及时更新
void swap(int *a[], int b)/*定义函数,因为只是排序,故为void型函数。
该函数要引入一指针数组。a为数组名,b位长度,关于这里的解析见主页。*/
{
int q, s, d, i, w, max;
//排序算法,这里用的是选择法,有兴趣的可以用冒泡法再写一遍。关于这两种方法具体见主页。
for (q = 0; q < b - 1; q++)
{
d = q;
max = *a[q];
for (i = q + 1; i < b; i++)
{
if (*a[i] > max)
{
max = *a[i];
d = i;
}
}
*a[d] = *a[q];
*a[q] = max;

}
}
int main()
{
int a, s, d, f;
int q[6];// 定义数组
int *w[6];//定义指针数组
for (a = 0; a < 6; a++)//输入数组内容,并初始化指针。
{
scanf("%d", &q[a]);
w[a] = &q[a];
}
swap(w, 6);//引用自定义函数
for (a = 0; a < 6; a++)//输出排好的数组。看序列是否调整完毕。治理为降序排列。
{
printf("%d ", q[a]);
}
return 0;

}

OK,上面代码的注释对每一步都进了较为详细的解释。
下面给出依次试运行结果截图


上面即为试运行截图。
如果还有什么问题呢,评论区留言。
如果上述代码有什么问题的话,请予以指出,谢谢。 😉

posted @ 2019-11-19 23:15  Mr小明同学  阅读(180)  评论(0编辑  收藏  举报