| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2213 人关注过本帖
标题:[求助]麻烦解释一下 关于数组
只看楼主 加入收藏
Paulnet
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2006-3-18
收藏
得分:0 

差不多
谢谢

如果你是珠海的
我请你吃饭
呵呵


我从来不说一些没有意义、为祸人间、又没有建设性的话,所以我不留下任何说明。
2006-11-04 20:10
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 
以下是引用jiahu0215178在2006-11-4 14:44:38的发言:
这好象 是一个:直接插入排序:,你首先就是要懂得如何实现插入排序的思想,看这个程序就简单了

正如所说,楼主的程序是直接插入排序
所以直接插入排序,就是从一个有序列中依次,抽出一个元素插入到这个序列中,因为要变为有序的序列,所以插入元素要其前面的元素比较大小

int b,f,i,k;
static a[11]={9,8,7,6,5,4,3,2,1,0}; //一个无序序列
for(i=1;i<=9;i++)//从第二个位置开始抽元素
{
b=a[i];//将抽出的元素保存在b中
for(k=i-1;k>=0;k--)//用抽出的元素与其前面的元素项比较大小
{if(b<a[k])
a[k+1]=a[k];//如果抽出元素比前面的小,则把小的元素放到大的元素的位置,即单向交换
else
break;}否则到下次循环(最外面的for)抽取下一个位置的元素

a[k+1]=b;//因为当抽出元素小的时候会被交换时候覆盖掉所以用b来保存被覆盖的值,
}

演示如下:
原序列为: 9 8 7 6 5 4 3 2 1 0
元素位置: 0 1 2 3 4 5 6 7 8 9
-----------------------------------------------------
i=1时:
抽出元素: 8
序列: 9 ^ 7 6 5 4 3 2 1 0
比较: 8 9 7 6 5 4 3 2 1 0 // 8插入后 比前面的9小,所以位置会被9替换,9原先位置应该为8,所以a[k+1]=b的意思就是把8放到原先9的位置
-----------------------------------------------------
i=2时:
抽出元素: 7
序列: 8 9 ^ 6 5 4 3 2 1 0
比较: 7 8 9 6 5 4 3 2 1 0
-----------------------------------------------------
i=3时:
抽出元素: 6
序列: 7 8 9 ^ 5 4 3 2 1 0
比较: 6 7 8 9 5 4 3 2 1 0
-----------------------------------------------------
i=4时:
抽出元素: 5
序列: 6 7 8 9 ^ 4 3 2 1 0
比较: 5 6 7 8 9 4 3 2 1 0


... ...

一直到最后
序列为:
0123456789


unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-11-04 20:10
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
unicorn版主归纳不错,支持.

谁有强殖装甲第二部,可以Q我460054868
2006-11-04 20:21
zzsy04et138
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2006-10-18
收藏
得分:0 
以下是引用C语言学习者在2006-11-4 14:33:01的发言:
首先要有书写格式先,再分析程序。我帮你整理先,如果看不明白,再讨论吧!
int b,f,i,k;
static a[11]={9,8,7,6,5,4,3,2,1,0};
for(i=1;i<=9;i++)
{
b=a[i];
for(k=i-1;k>=0;k--)
{if(b<a[k])
a[k+1]=a[k];
else
break;}

a[k+1]=b;
}
for(f=0;f<=10;f++) --->改成for(f=0;f<10;f++)
printf("%d",a[f]);


2006-11-04 20:24
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
分析方法:
对于较短的程序可以采用一步一步跟踪的方法
对于较长的程序或多循环的程序要先分析程序各部分\各模块的功能,然后在深入细化分析

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-11-04 20:30
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
以下是引用zzsy04et138在2006-11-4 20:24:43的发言:

这个应该向楼主建议差不多。
#include<stdio.h>
main()
{
int b,f,i,k;
static a[10]={9,8,7,6,5,4,3,2,1,0};
for(i=1;i<=9;i++)
{
b=a[i];
for(k=i-1;k>=0;k--)
{if(b<a[k])
a[k+1]=a[k];
else
break;}

a[k+1]=b;
}
for(f=0;f<10;f++)
printf("%d",a[f]);
return 0;
}


谁有强殖装甲第二部,可以Q我460054868
2006-11-04 20:31
zzsy04et138
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2006-10-18
收藏
得分:0 
呼呼,顺便顶下十二楼的版主

2006-11-04 20:31
Paulnet
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2006-3-18
收藏
得分:0 
以下是引用zzsy04et138在2006-11-4 20:24:43的发言:

你这样的话
会出现错误的


我从来不说一些没有意义、为祸人间、又没有建设性的话,所以我不留下任何说明。
2006-11-04 22:30
Paulnet
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2006-3-18
收藏
得分:0 
以下是引用C语言学习者在2006-11-4 20:31:41的发言:

这个应该向楼主建议差不多。
#include<stdio.h>
main()
{
int b,f,i,k;
static a[10]={9,8,7,6,5,4,3,2,1,0};
for(i=1;i<=9;i++)
{
b=a[i];
for(k=i-1;k>=0;k--)
{if(b<a[k])
a[k+1]=a[k];
else
break;}

a[k+1]=b;
}
for(f=0;f<10;f++)
printf("%d",a[f]);
return 0;
}

会出现错误


我从来不说一些没有意义、为祸人间、又没有建设性的话,所以我不留下任何说明。
2006-11-04 22:30
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
出现什样错误呢?

谁有强殖装甲第二部,可以Q我460054868
2006-11-04 22:35
快速回复:[求助]麻烦解释一下 关于数组
数据加载中...
 
   



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

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