| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2332 人关注过本帖
标题:怎么用一个没有参数的函数对数组排序
只看楼主 加入收藏
aoaoaoao
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-5-14
收藏
得分:0 
我简单的认为这个是为了检验栈以下的知识.

函数调用过程中保存返回地址
保存堆栈框架
保存在sort函数中用到的寄存器的值
sort函数中为局部变量分配空间

编译器不同,对函数操作的情况会有差别,
代码的实现当然要依赖编译器和cpu的设计...


2007-10-09 19:18
jinxin3256
Rank: 1
等 级:新手上路
帖 子:196
专家分:0
注 册:2007-9-7
收藏
得分:0 
好像很危险。。。具体是满递增,满递减,空递增,空递减,到底是哪一种栈要先确定吧

代替leisure1980广告下: 群号45146331
2007-10-09 20:43
aoaoaoao
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-5-14
收藏
得分:0 


这个栈是由80x86cpu内部的ss 和esp或sp 寄存器支持的,

int数组array 是局部变量它的内存空间就是在栈上,

在sort函数中分配1个int型变量a,这个变量a和数组array都在这个cpu硬件支持的栈段上,

用a的地址加上 一定的偏移量就可以寻找到数组array中每个元素,


至于上边朋友说的vc6.0,它在生成代码的时候 变量a和数组array之间的偏移值不同于tc,

至于偏移是多少按照调用函数的过程自己计算,

在vc6.0中 把上次代码中的 p=p+4//修改成 p=p+22 ,我的机器上是能够访问到 数组a的第1个元素的.




2007-10-09 21:22
canyue
Rank: 1
等 级:新手上路
威 望:1
帖 子:159
专家分:0
注 册:2007-10-4
收藏
得分:0 
看了楼上的各位后,我发现我还差很远,很远,很远,很远,很远…………

别看我现在只有这么亮,总有一天会月圆的!
2007-10-09 22:52
aoaoaoao
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-5-14
收藏
得分:0 
重新写了个..........

[CODE]

#include <stdio.h>
void sort(void);
int main()
{
int array[]={45,56,234,1,34,23,2,3};


sort();

{
int i; /*这儿的复合语句只是检验下数组array已经被sort()函数排序修改*/

for(i=0;i<8;i++)
printf("%d ",array[i]);
/*tc下请加getch()*/;
}


return 0;
}

void sort (void)
{
int index;

int *p=&index;

int b[]={45,56,234,1,34,23,2,3};


while(*p!=b[0]||p==b)
p++;


do{
index=0;
while(b[index]==p[index])
{
index++;
if(index==8)
break;
}
++p;
}while(index!=8);

--p;

{
int i,j,mid;
for(i=0;i<7;i++)
for(j=i+1;j<8;j++)
{
if(p[i]>p[j])
{
mid=p[i];
p[i]=p[j];
p[j]=mid;
}
}
}


}

[/CODE]
2007-10-09 23:22
aoaoaoao
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-5-14
收藏
得分:0 

这个tc和 vc都应该可以了把

2007-10-09 23:23
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
楼上的估计可以,这个办法倒是挺不错的,不需要弄明白那些复杂的知识就可以做到。
不过如果恰好index的地址和数组第一个元素的地址之间的差距不是sizeof(int)的整数倍,这样就不行了吧。

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-10-10 10:19
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 

我有一个地方不明白``` oaoaoaaoao在sort函数声明了住函数的数组```

要是住函数是通过人为输入``而不是直接赋值``那么sort函数的数组又怎么定义呢``或者说又怎么半呢?






女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-10-10 11:01
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
收藏
得分:0 

很想学习一下,不过我觉得这样题目没有意义,本来带参数是很容易实现的嘛.


只有想不到,没有做不到
2007-10-10 11:23
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
这里有个前提:这个是一个题目,不允许修改主函数,所以需要用这么复杂的办法,实际编程的话,根本没人这么无聊。

所以如果可以假设数组通过人为输入,那就可以假设把数组设为全局变量了。如果非要做一个通用的解法,估计不写汇编是不行的,而且代码量也不少

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-10-10 11:27
快速回复:怎么用一个没有参数的函数对数组排序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013514 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved