2014-11-13 4 views
2

Я довольно новый в программирование и мой учитель хочет, чтобы я осуществить вставки рода в С.В C: отрицательные вставки числа рода

Моего код работает, но не с отрицательными числами, если я использую его с отрицательными числами в мой массив я всегда получаю ошибку сегментации:

void insertion_sort(int array[], int len) { 
    int i  = 0; 
    int j  = 1; 
    signed int tmp  = array[0]; 

    for(i = 1; i < len; i++) { 
     tmp = array[i]; 
     j = i - 1; 

     if(j >= 0){ 
      while(tmp < array[j]) { 
       array[j + 1] = array[j]; 
       j = j - 1; 
      } 
     } 
     array[j + 1] = tmp; 
    } 
} 

ответ

1

Изменить этот фрагмент кода

if(j >= 0){ 
     while(tmp < array[j]) { 
      array[j + 1] = array[j]; 
      j = j - 1; 
     } 
    } 

в

while (j >= 0 && tmp < array[j]) { 
      array[j + 1] = array[j]; 
      j = j - 1; 
    } 

Примите во внимание, что нет никакого смысла для инициализации определенных переменных

int i  = 0; 
int j  = 1; 
signed int tmp  = array[0]; 

, потому что они будут перезаписаны в последовавшей отчетности.

+0

Спасибо за вашу помощь :) – LiteLive

+0

хорошо, я думал, что мне нужно бы сделать это , так что я могу просто написать Int I, J подписал INT TMP – LiteLive

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