| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1695 人关注过本帖
标题:[求助]在数组用用插入法排序的问题(明白楼,请看4楼)
只看楼主 加入收藏
zpeye
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-26
收藏
 问题点数:0 回复次数:16 
[求助]在数组用用插入法排序的问题(明白楼,请看4楼)

未这个代码能够实现排序,但是未把数组a里面的12换成比15大的数的时候8就丢失了,但是改的比15小的数就没问题
是在是想不明白了
另外这个还可优化吗?以小弟刚刚学到这里,表用后面的啊 看不懂啊!

#include <stdio.h>

void main()
{
int a[6]={5,8,6,3,12,15};
int b[6];
int i, k, j;

printf("未排序的数组:");
for(i=0;i<6;i++)
{
printf("%d ",a[i]);
}
printf("\n");

//排序
b[0]=a[0];
for(i=1;i<6;i++)
{
for(j=0;j<i;j++)
{
if(a[i]<b[j])
{
for(k=i;k>0;k--)
{
b[k]=b[k-1];
}
b[j]=a[i];
break;
}
else if(a[i]>b[i-1])
{
b[i]=a[i];
}
}
}

//输出
printf("排序后的数组:");
for(i=0;i<6;i++)
{
printf("%d ",b[i]);
}
printf("\n");
getchar();
}

[此贴子已经被作者于2006-7-27 16:48:20编辑过]

搜索更多相关主题的帖子: printf 用用 void 
2006-07-27 15:21
yuchujin
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-25
收藏
得分:0 
沙发

........晕 这个BBS不能贴图.......... G-G-G-G-G-G-G-UNIT
2006-07-27 15:24
zpeye
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-26
收藏
得分:0 

晕啊 楼上的专业点嘛


2006-07-27 15:27
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
以下是引用zpeye在2006-7-27 15:21:36的发言:

未这个代码能够实现排序,但是未把数组a里面的12换成比15大的数的时候8就丢失了,但是改的比15小的数就没问题
是在是想不明白了
另外这个还可优化吗?以小弟刚刚学到这里,表用后面的啊 看不懂啊!

#include <stdio.h>

void main()
{
int a[6]={5,8,6,3,12,15};
int b[6];
int i, k, j;

printf("未排序的数组:");
for(i=0;i<6;i++)
{
printf("%d ",a[i]);
}
printf("\n");

//排序
b[0]=a[0];
for(i=1;i<6;i++)
{
for(j=0;j<i;j++)
{
if(a[i]<b[j])
{
for(k=i;k>j;k--) /*向后调位置的条件弄错*/
{
b[k]=b[k-1];
}
b[j]=a[i];
break;
}
else if(a[i]>b[i-1])
{
b[i]=a[i];
}
}
}

//输出
printf("排序后的数组:");
for(i=0;i<6;i++)
{
printf("%d ",b[i]);
}
printf("\n");
getchar();
}

这样您再试试,这种代码看起来比较累.
程序大体算法是:
b[]是目标数组.
1.b[0]=a[0];
2. 两重循环,外重从a[1]到a[5],内重for(j=0;j<i;j++),
如果满足a[i]<b[j]则b[]向后移动(注意并不是整个数组都后移,而是从大于a[i]的元素开始,原程序就错在这里);
如果不满足,比较a[i]和b[]的最后一个元素,如果a[i]>b[i-1],则把a[i]存入b[i].


对不礼貌的女生收钱......
2006-07-27 16:07
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
void insertsort(int data[],int n)
{
int i,j,temp;

for(i=1;i<n;i++)
{
temp=data[i];
j=i;
while(j>0&&temp>data[j-1])
{
data[j]=data[j-1];
j--;
}
data[j]=temp;
}
}

倚天照海花无数,流水高山心自知。
2006-07-27 16:09
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
反了。

对不礼貌的女生收钱......
2006-07-27 16:13
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
先理解插入排序的方式。
简化也要知道你是怎么排序的。
多用函数,少用些变量。再者考虑时间和空间复杂度。

倚天照海花无数,流水高山心自知。
2006-07-27 16:14
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用soft_wind在2006-7-27 16:13:14的发言:
反了。


倚天照海花无数,流水高山心自知。
2006-07-27 16:15
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
什么反了?

倚天照海花无数,流水高山心自知。
2006-07-27 16:16
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
您看看您的输出和我改后程序的输出就知道了

对不礼貌的女生收钱......
2006-07-27 16:21
快速回复:[求助]在数组用用插入法排序的问题(明白楼,请看4楼)
数据加载中...
 
   



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

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