int main()
{
int i,j,t,a[10];
for(i=0;i<10;i++)
{
a[i]=rand()%51+50;
printf("%d ",a[i]);
}
for(i=0;i<10;i++)
{
for(j=8;j>=0;j--)
{
if(a[j+1]>a[j])
{
t=a[j+1];a[j+1]=a[j];a[j]=t;}
else
break;
}
}
printf("\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
}
我的程序不知道错哪儿了?有高手能帮忙看看啊?谢谢啦~~~O(∩_∩)O~
11 个解决方案
#1
if(a[j+1]>a[j])
{
t=a[j+1];a[j+1]=a[j];a[j]=t;} //如果后一个大,则交换
else //否则, 应该干什么?
break; //退出本次循环? 那你的那个元素插入到数组中相应的位置了吗?
{
t=a[j+1];a[j+1]=a[j];a[j]=t;} //如果后一个大,则交换
else //否则, 应该干什么?
break; //退出本次循环? 那你的那个元素插入到数组中相应的位置了吗?
#2
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i,j,t,a[10];
srand(unsigned(time(NULL)));
for(i=0;i<10;i++)
{
a[i]=rand()%51+50;
printf("%d ",a[i]);
}
for(i=0;i<10;i++)
{
for(j=8;j>=0;j--)
{
if(a[j+1]>a[j])
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
// else 这里注释掉~ 自己理解下
// break;
}
}
printf("\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}
#3
另外内部循环 for(j=8;j>=0;j--)没必要每次都从尾到头吧.
#4
#include <stdio.h>
#include <stdlib.h>//头文件
int main()
{
int i,j,a[10];
for(i=0;i<10;i++)
{
a[i]=rand()%51+50;
printf("%d ",a[i]);
}
for(i=1;i<10;i++)//插入排序
{
int e=a[i];
for(j=i-1;j>=0&&a[j]<e;j--)
{
a[j+1]=a[j];
}
a[j+1]=e;
}
printf("\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
}
#5
// else 这里注释掉~ 自己理解下
// break;
2楼说的对,你这里不应break,应该继续向上找啊
// break;
2楼说的对,你这里不应break,应该继续向上找啊
#6
有方案了,我退出!
#7
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(0)); //随机数发生器的初始化函数
int i, j;
int a[10], r[11];
for (i=0;i<10;i++)
{
a[i] = rand()%51 + 50;
r[i+1] = a[i];
printf("%d ", a[i]);
}
r[0] = 1;
for (i=2; i<=10; i++)
{
r[0] = r[i];
j = i-1;
while (r[0] > r[j])
{
r[j+1] = r[j];
j--;
}
r[j+1] = r[0];
}
printf("\n");
for (i=1; i<=10; i++)
{
printf("%d ",r[i]);
}
return 0; // 返回值
}
#8
for (i=2; i<=10; i++)
a[10]应该是个未定义。
#9
if(a[j+1]>a[j])
{
t=a[j+1];a[j+1]=a[j];a[j]=t;}
//else 这两行去了
//break;
}
单步调试下,很快就会发现这个问题
#10
老兄,你别吓我哦,我承认我很水,但也没水到这地步撒。
#11
楼主的方法是冒泡,我的是插入排序!
#1
if(a[j+1]>a[j])
{
t=a[j+1];a[j+1]=a[j];a[j]=t;} //如果后一个大,则交换
else //否则, 应该干什么?
break; //退出本次循环? 那你的那个元素插入到数组中相应的位置了吗?
{
t=a[j+1];a[j+1]=a[j];a[j]=t;} //如果后一个大,则交换
else //否则, 应该干什么?
break; //退出本次循环? 那你的那个元素插入到数组中相应的位置了吗?
#2
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i,j,t,a[10];
srand(unsigned(time(NULL)));
for(i=0;i<10;i++)
{
a[i]=rand()%51+50;
printf("%d ",a[i]);
}
for(i=0;i<10;i++)
{
for(j=8;j>=0;j--)
{
if(a[j+1]>a[j])
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
// else 这里注释掉~ 自己理解下
// break;
}
}
printf("\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}
#3
另外内部循环 for(j=8;j>=0;j--)没必要每次都从尾到头吧.
#4
#include <stdio.h>
#include <stdlib.h>//头文件
int main()
{
int i,j,a[10];
for(i=0;i<10;i++)
{
a[i]=rand()%51+50;
printf("%d ",a[i]);
}
for(i=1;i<10;i++)//插入排序
{
int e=a[i];
for(j=i-1;j>=0&&a[j]<e;j--)
{
a[j+1]=a[j];
}
a[j+1]=e;
}
printf("\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
}
#5
// else 这里注释掉~ 自己理解下
// break;
2楼说的对,你这里不应break,应该继续向上找啊
// break;
2楼说的对,你这里不应break,应该继续向上找啊
#6
有方案了,我退出!
#7
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(0)); //随机数发生器的初始化函数
int i, j;
int a[10], r[11];
for (i=0;i<10;i++)
{
a[i] = rand()%51 + 50;
r[i+1] = a[i];
printf("%d ", a[i]);
}
r[0] = 1;
for (i=2; i<=10; i++)
{
r[0] = r[i];
j = i-1;
while (r[0] > r[j])
{
r[j+1] = r[j];
j--;
}
r[j+1] = r[0];
}
printf("\n");
for (i=1; i<=10; i++)
{
printf("%d ",r[i]);
}
return 0; // 返回值
}
#8
for (i=2; i<=10; i++)
a[10]应该是个未定义。
#9
if(a[j+1]>a[j])
{
t=a[j+1];a[j+1]=a[j];a[j]=t;}
//else 这两行去了
//break;
}
单步调试下,很快就会发现这个问题
#10
老兄,你别吓我哦,我承认我很水,但也没水到这地步撒。
#11
楼主的方法是冒泡,我的是插入排序!