2016-02-08 5 views
-3

Что не так с этим кодом? в то время как часть цикла не работает. если заявление не достаточно, чтобы завершить в то время как петляC- Insertion sort

int main(void) { 

    int data[SIZE] = { 12,2,5,8,2,45,89,0,12,4 }; 

    int i, j, tmp; 

    for (i = 0; i < SIZE-1; i++) { 
     j = i + 1; 
     tmp = data[j]; 
     while (j > 0){ 
      if(data[j-1] > tmp){ 
       data[j] = data[j - 1]; 
       j--; 
      } 
     } 
     data[j] = tmp; 
    } 

    for (i = 0; i < SIZE; i++) 
     printf("%d, ", data[i]); 

return 0; 
} 
+0

и где ваше отладочное усилие? –

+0

Пожалуйста, покажите свое исследование до времени. Сначала прочитайте страницу [Ask]. –

+0

И узнайте, как использовать разметку здесь. – Olaf

ответ

0

j--; находится внутри вашего if заявления. Если data[j-1] > tmp - false, ваша петля не закончится. Кроме того, ваш алгоритм не сортирует массив. Адаптируйте свой код следующим образом:

int main (void) 
{ 
    int data[SIZE] = { 12,2,5,8,2,45,89,0,12,4 }; 

    int i, j, tmp; 

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

    for (i = 0; i < SIZE; i++) { 
     printf("%d, ", data[i]); 
    } 
    return 0; 
} 
+0

Спасибо. поэтому, если выражение недостаточно для завершения цикла while. – Ezerk

 Смежные вопросы

  • Нет связанных вопросов^_^