当前位置: 代码迷 >> C语言 >> [求助]在数组用用插入法排序的问题(明白楼,请看4楼)
  详细解决方案

[求助]在数组用用插入法排序的问题(明白楼,请看4楼)

热度:132   发布时间:2006-07-27 15:21:36.0
[求助]在数组用用插入法排序的问题(明白楼,请看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  

----------------解决方案--------------------------------------------------------
沙发
----------------解决方案--------------------------------------------------------

晕啊 楼上的专业点嘛


----------------解决方案--------------------------------------------------------
以下是引用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].


----------------解决方案--------------------------------------------------------
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;
}
}
----------------解决方案--------------------------------------------------------
反了。
----------------解决方案--------------------------------------------------------
先理解插入排序的方式。
简化也要知道你是怎么排序的。
多用函数,少用些变量。再者考虑时间和空间复杂度。
----------------解决方案--------------------------------------------------------
以下是引用soft_wind在2006-7-27 16:13:14的发言:
反了。


----------------解决方案--------------------------------------------------------
什么反了?
----------------解决方案--------------------------------------------------------
您看看您的输出和我改后程序的输出就知道了。
----------------解决方案--------------------------------------------------------

  相关解决方案