【问题标题】:bubble sort ideone time limit exceeded冒泡排序 ideone 超出时间限制
【发布时间】:2015-09-01 10:23:19
【问题描述】:
#include <stdio.h>

int main(void) {

    int a[5]={1,2,0,5,4},i,j,c;
    for(i=0;i<5;i++)    
    {
        for(j=0;j<5-i;j++){
            if(a[j]>a[j+1])
            {
                c=a[j];
                a[j]=a[j+1];
                a[j+1]=c;
            }
        }
    }
    for(i=0;i<5;i++)
    {
    printf("%d",a[i]);
    }
    return 0;
}

ideone 说“时间限制超出时间:5 内存:2048 信号:24”

但它在涡轮编译器上工作正常

【问题讨论】:

  • 想一想:一旦内部循环完成索引i 或之前的所有元素,都应该排序。这意味着你的内部循环应该从i + 1 到最后一个元素(j &lt; 5),你应该交换元素ij

标签: c sorting bubble-sort


【解决方案1】:
int a[5]={1,2,0,5,4}

所以,对于下面的索引,你会得到以下内容:

index   ->| 0 | 1 | 2 | 3 | 4 |
content ->| 1 | 2 | 0 | 5 | 4 |

现在在你的外循环for(i=0;i&lt;5;i++),对于第一次迭代i = 0,那么内循环中断条件将是,

for(j=0;j<5-i;j++)

或者,

for(j=0;j<5-0;j++)

因此j 的值将增加04

现在想想a[j+1],当j = 4时会发生什么!

您正在尝试访问a[4+1]a[5],其中数组aindex 被定义为4

所以在a[5],你会得到Undefined behavior

试试:

for(j=0; j<5 -i -1; j++)

【讨论】:

    【解决方案2】:

    试试这个冒泡排序..机器周期不会在任何编译器中受到阻碍..

    for (i = 0; i < count -1; i++)
          for (j = 0; j < ((count - 1) - i); j++) {
              if (memptr[j]>memptr[j+1]) {
                  temp = memptr[j];
                  memptr[j] = memptr[j + 1];
                  memptr[j + 1] = temp;
              }
          }
    

    【讨论】:

      【解决方案3】:
      for(j=0;j<5-i;j++){
                  if(a[j]>a[j+1])
      

      a[j+1] 是数组越界访问,这将导致未定义的行为

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-18
        • 1970-01-01
        • 1970-01-01
        • 2011-06-25
        • 1970-01-01
        • 2013-10-09
        • 2015-09-12
        相关资源
        最近更新 更多