随机产生10个两位整数放入一维数组,用插入法按降序排序

时间:2021-12-19 08:05:13
#include <stdio.h>
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;                             //退出本次循环? 那你的那个元素插入到数组中相应的位置了吗?

#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,应该继续向上找啊

#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


引用 7 楼 mylovezhyl 的回复:
C/C++ code

#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(……


 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


引用 8 楼 niuchengshi 的回复:
for (i=2; i<=10; i++)

a[10]应该是个未定义。


老兄,你别吓我哦,我承认我很水,但也没水到这地步撒。

#11


楼主的方法是冒泡,我的是插入排序!

#1


if(a[j+1]>a[j])
  {
  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,应该继续向上找啊

#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


引用 7 楼 mylovezhyl 的回复:
C/C++ code

#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(……


 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


引用 8 楼 niuchengshi 的回复:
for (i=2; i<=10; i++)

a[10]应该是个未定义。


老兄,你别吓我哦,我承认我很水,但也没水到这地步撒。

#11


楼主的方法是冒泡,我的是插入排序!