Отсортировать массив символов по убыванию - 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-ый вариант:

  1. Создается копия входного массива s и сохраняется в переменной d.
  2. В цикле итерируемся по массиву от первого элемента до последнего, пока не достигнем конца строки.
  3. Если текущий элемент меньше следующего за ним, меняем их местами и обновляем значение переменной go, которая используется во внешнем цикле.
  4. Внешний цикл продолжается, пока есть изменения (go == 1).
  5. Возвращаем отсортированный массив. 2-ой вариант:
  6. Создается копия входного массива s и сохраняется в переменной d.
  7. Если первый элемент массива пустой, возвращаем d.
  8. Используем цикл do-while для проверки наличия изменений в массиве.
  9. Внутренний цикл итерируется по массиву от d + 1 до конца строки.
  10. Если текущий элемент меньше следующего за ним, меняем их местами и обновляем значение переменной go.
  11. Внешний цикл продолжается, пока есть изменения (go == 1).
  12. Возвращаем отсортированный массив. В функции main создаются два массива строк, которые сортируются с помощью bsort1 и bsort2 соответственно. Результат выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы