Я хотел бы отсортировать массив символов. Однако каждый раз, когда я запускаю программу, он падает, когда он достигает функции QuickSort. Что может быть неправильным, что вызывает такой эффект? Я использую массив указателей, чтобы отсортировать массив.Использование быстрой сортировки для сортировки массивов символов
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void print(char** A, int n){
int i = 0;
for (i = 0; i < n; i++){
printf("%s\n", A[i]);
}
}
int Partition(char** A, int p, int r){
char *temp = (char*)malloc(sizeof(char)*30);
char *x = (char*)malloc(sizeof(char)*30);
x = A[r];
int i = p - 1;
int j = 0;
for(j = p; j<=r; j++){
if(strcmp(A[j],x) <=0){
i=i+1;
temp = A[i];
A[i] = A[j];
A[j] = temp;
}
}
if(i<r){
return i;
}else{
return i-1;
}
free(temp);
free(x);
}
void QuickSort(char** A, int p, int r){
if(p<r){
int q = Partition(A, p, r);
QuickSort(A, p, q);
QuickSort(A, q+1, r);
}
}
int main(){
int i = 0;
char **A = (char**) malloc(12*sizeof(char*));
for(i = 0; i < 12; i++){
A[i] = (char*) malloc(sizeof(char)*30);
}
strcpy(A[0], "imarr");
strcpy(A[1], "ikak");
strcpy(A[2], "agh");
strcpy(A[3], "ogss");
strcpy(A[4], "alllll");
strcpy(A[5], "ackm");
strcpy(A[6], "plccc");
strcpy(A[7], "strrr");
strcpy(A[8], "raat");
strcpy(A[9], "omhhh");
strcpy(A[10], "rrors");
strcpy(A[11], "basds");
QuickSort(A, 0, 12);
print(A, 12);
free(A);
return 0;
}
Почему вы не используете [ 'qsort'] (http://en.cppreference.com/w/c/algorithm/qsort)? – deepmax
Потому что я узнаю, как реализовать алгоритмы, и использование функции предварительной сборки не заставит учителя дать мне хорошую оценку. – MaranX