Отсортировать массив символов по убыванию - C (СИ)
Формулировка задачи:
Здраствуйте!
Нужно отсортировать массив символов по убиванию,то есть строку,НО не используя индексы и стандартные функции.Питаюсь методом пузырька сортировать,но почему то не получается.Поможете?
void sorting(char* string,int length)
{int i,j;
char temp;
for (i = 0; i < length-1; i++)
{
for (j =i+1; j < length; j++)
{
if ((*string) < (*(string+j)))
temp = *string;
*string= *(string+j);
*(string+j)=temp;
}
}
}
int string_length(char* string)
{int length=0;
while(*string++)
length++;
return length;
}Решение задачи: «Отсортировать массив символов по убыванию»
textual
Листинг программы
#include <stdio.h>
//1-ый вариант
char* bsort1(char* s){
char* i, c, *e, *d = s;
for(e = s; *e; ++e);
for(++s; s < e; ++s){
for(i = e - 1; i >= s; --i){
if(*i < *(i - 1)){
c = *i;
*i = *(i - 1);
*(i - 1) = c;
}
}
}
return d;
}
//2-ой вариант
char* bsort2(char* s){
int go;
char c, *d = s;
if(! *s)
return d;
do {
go = 0;
for(s = d + 1; *s; ++s){
if(*s < *(s - 1)){
c = *s;
*s = *(s - 1);
*(s - 1) = c;
go = 1;
}
}
}while(go);
return d;
}
int main(void){
char s1[] = "QWERTYUIOPASDFGHJKLZXCVBNM";
char s2[] = "XXZZAAWWDDBBFFCCMMOOEEGGYY";
puts(s1);
puts( bsort1(s1) );
putchar('\n');
puts(s2);
puts( bsort2(s2) );
return 0;
}
Объяснение кода листинга программы
Код представляет собой функцию сортировки массива символов по убыванию. 1-ый вариант:
- Создается копия входного массива s и сохраняется в переменной d.
- В цикле итерируемся по массиву от первого элемента до последнего, пока не достигнем конца строки.
- Если текущий элемент меньше следующего за ним, меняем их местами и обновляем значение переменной go, которая используется во внешнем цикле.
- Внешний цикл продолжается, пока есть изменения (go == 1).
- Возвращаем отсортированный массив. 2-ой вариант:
- Создается копия входного массива s и сохраняется в переменной d.
- Если первый элемент массива пустой, возвращаем d.
- Используем цикл do-while для проверки наличия изменений в массиве.
- Внутренний цикл итерируется по массиву от d + 1 до конца строки.
- Если текущий элемент меньше следующего за ним, меняем их местами и обновляем значение переменной go.
- Внешний цикл продолжается, пока есть изменения (go == 1).
- Возвращаем отсортированный массив. В функции main создаются два массива строк, которые сортируются с помощью bsort1 и bsort2 соответственно. Результат выводится на экран.