Закрепление код
Прежде всего, есть некоторые довольно серьезные фундаментальные проблемы, связанные с вашим кодом. Прежде чем мы справимся с этими проблемами, давайте просто исправим то, что у вас есть. Ваш цикл сортировки представлял собой половину сортировки массива и половину сортировки массива b. вы также никогда не инициализировали массив b для хранения каких-либо значений. Вот исправленная версия кода:
#define CLASS_SIZE 10
#include <stdio.h>
void bubbleSortAWriteToB(const char a[], char * b[]);
int main(void){
int i;
// initialize array
char * s_letters[CLASS_SIZE];
char letters[CLASS_SIZE] = {'a','r','p','b','r','c','x','e','w','j'};
// sort array
bubbleSortAWriteToB(letters,s_letters);
// print sorted array
for (i=0;i<CLASS_SIZE;i++){
printf("%c\n", *s_letters[i]);
}
return 0;
}
void bubbleSortAWriteToB(const char a[], char * b[]){
char * temp;
int i,j;
// initialize b array to hold pointers to each element in a
for (i=0;i<CLASS_SIZE;i++){
b[i] = (char *)(a) + i;
}
// in-place sort the b array
for(i=0;i<CLASS_SIZE;i++){
for(j=i+1;j<CLASS_SIZE-1;j++){
if(*b[j-1]>*b[j]){
temp = b[j];
b[j] = b[j-1];
b[j-1] = temp;
}
}
}
}
Исправление было инициализировать массив б с точками а, а затем отсортировать массив б на месте путем сравнения соответствующих значений в массиве.
Упрощая код
В исходном коде, стратегия должна была иметь массив указателей (б), которые указывают на элементы в а, а затем получить отсортированный. Здесь это было необязательно, потому что символы меньше указателей, поэтому пусть b - массив символов, более экономичный и простой в пространстве.
Кроме того, ваши интервалы были очень скрученными и несколько трудными для чтения. Вот решение, которое использует b как массив символов вместо указателей и предлагает улучшенный интервал. Кроме того, объявление функции выше не было необходимым. Достаточно определить функцию и объявить ее один раз.
#define CLASS_SIZE 10
#include <stdio.h>
void bubbleSortAWriteToB(const char a[], char b[]){
char temp;
int i,j;
// initialize b array to hold pointers to each element in a
for (i = 0; i < CLASS_SIZE; i++){
b[i] = a[i];
}
// in-place sort the b array
for(i = 0; i < CLASS_SIZE; i++){
for(j = i + 1; j < CLASS_SIZE - 1; j++){
if(b[j-1] > b[j]){
temp = b[j];
b[j] = b[j-1];
b[j-1] = temp;
}
}
}
}
int main(void){
int i;
// initialize array
char s_letters[CLASS_SIZE];
char letters[CLASS_SIZE] = {'a','r','p','b','r','c','x','e','w','j'};
// sort array
bubbleSortAWriteToB(letters, s_letters);
// print sorted array
int i;
for (i = 0; i < CLASS_SIZE; i++){
printf("%c\n", s_letters[i]);
}
return 0;
}
Это не бесконечный цикл, [это ошибка сегментации] (HTTP: //codepad.org/7BwJOikP). –
Что это значит? – Umut
Это означает, что вы пытаетесь получить доступ к памяти, которой не должно быть. –