2015-08-19 4 views
0
#include<conio.h> 
#include<stdio.h> 

int main(void) 
{ 
    int i,j,temp; 
    char str[]="geeksforgeeks"; 
    for(i=1;str[i];i++) 
    { 
     for(j=0;str[j]!='\0';j++) 
     { 
      if(str[j]>str[j+1]) 
      { 
       temp=str[j]; 
       str[j]=str[j+1]; 
       str[j+1]=temp; 
      }  
     } 
    } 
    for(i=0;str[i]!='\0';i++) 
    { 
     printf("%c",str[i]); 
    } 
} 

Я хочу, чтобы это было сделано без вычисления длины строки. Поскольку я знаю, что ошибка находится в условии утверждения цикла for, тогда скажите мне, что это должно быть?Bubble sort on string

+4

Ошибка! 'if (str [j]> str [j + 1])' является UB для последнего элемента. –

+1

Вы также должны предоставить примерный тестовый пример (ввод и вывод). Или, если сбой кода говорит нам об ошибке! Это поможет лучше понять, что не так :) –

+2

В настоящее время очень неясно, что вы спрашиваете, и что вы пытаетесь сделать. Объясните, что вы пытаетесь сделать, что не так, и почему вы знаете, что это неправильно. Тогда задайте ясный вопрос. Вы создадите гораздо большую готовность помочь, сделав это, потому что все мы хотим помочь, но мы не хотим тратить навсегда выяснение того, что вы хотите. – Dan

ответ

1

Как уже указывал Weather Vane, погрешность составляет str[j]>str[j+1]. Это переключит второй последний символ с помощью NULL-терминатора (и, следовательно, вы пропустите свое конечное условие для цикла for).

Чтобы исправить это изменение, установите условие конца цикла на str[j+1]!='\0' и добавьте проверку в начале, чтобы убедиться, что первый символ в массиве не равен '\ 0'! Я также предлагаю исследовать поиск Bubble, потому что этот код содержит много дополнительных итераций!

+0

понял! спасибо – sony

+0

да, я думаю, что лучше определить переменную, а когда нет swap, то после вложенного цикла мы должны разбить цикл, чтобы уменьшить итерации – sony