Быстрая сортировка массива символов (строки) C программирования
У меня есть массив символов
char word[30];
в нем содержится слово, которое пользователь введет, и я хочу отсортировать буквы, например, если слово "кот", я хочу, чтобы оно превратилось в "акт", я полагаю, это довольно простая задача, но, как новичок в программировании на С, я нахожу примеры в интернете довольно запутанные.
Это мой код, пытающийся сделать пузырьковую сортировку...
Все еще не работает
#include <stdio.h>
#include<string.h>
#define MAX_STRING_LEN 30
main()
{
char w1[30], w2[30];
char tempw1[30], tempw2[30];
int n,i,k;
char temp;
printf("Give the first word: ");
scanf("%s",&w1);
printf("Give the second word: ");
scanf("%s",&w2);
if(strlen(w1)==strlen(w2)) /* checks if words has the same length */
{
strcpy(tempw1,w1); /*antigrafei to wi string sto tempw1 */
strcpy(tempw2,w2); /*antigrafei to w2 string sto tempw2 */
n=strlen(w1);
for (i=1; i<n-1; i++)
{
for (k=n;k>i+1;k--)
{
if (w1[k] < w1[k-1])
{
temp=w1[k-1];
w1[k-1]=w1[k];
w1[k]=temp;
}
}
}
for (i=1; i<n-1; i++)
{
for (k=n;k>i+1;k--)
{
if (w2[k] < w2[k-1])
{
temp=w2[k-1];
w2[k-1]=w2[k];
w2[k]=temp;
}
}
}
printf("%s \n",tempw1);
printf("%s \n",w1);
printf("%s \n",tempw2);
printf("%s \n",w2);
/* call qsort */
/* call compare */
}
else printf(" \n H lexh %s den einai anagrammatismos tis lexhs %s",w1,w2);
return 0;St
2 ответа
Использование qsort()
из стандартной библиотеки C:
int compare(const void *a, const void *b)
{
return *(const char *)a - *(const char *)b;
}
char arr[] = "dbaurjvgeofx";
printf("Unsorted: %s\n", arr);
qsort(arr, strlen(arr), 1, compare);
printf("Sorted: %s\n", arr);
Это фундаментальные знания в области программирования, и вы сами сделаете себе одолжение, решив это сами.
Это, как говорится, вот быстрое псевдо
for i is equal to 1 to length of array
for k is equal to i to length of array
if i > k
temp = i
i = k
k = temp
endif
endfor
endfor