Отсортировать массив символов по убыванию - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здраствуйте! Нужно отсортировать массив символов по убиванию,то есть строку,НО не используя индексы и стандартные функции.Питаюсь методом пузырька сортировать,но почему то не получается.Поможете?
Листинг программы
  1. void sorting(char* string,int length)
  2. {int i,j;
  3. char temp;
  4. for (i = 0; i < length-1; i++)
  5. {
  6. for (j =i+1; j < length; j++)
  7. {
  8. if ((*string) < (*(string+j)))
  9. temp = *string;
  10. *string= *(string+j);
  11. *(string+j)=temp;
  12. }
  13. }
  14. }
  15. int string_length(char* string)
  16. {int length=0;
  17. while(*string++)
  18. length++;
  19. return length;
  20. }

Решение задачи: «Отсортировать массив символов по убыванию»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. //1-ый вариант
  4. char* bsort1(char* s){
  5.         char* i, c, *e, *d = s;
  6.         for(e = s; *e; ++e);
  7.        
  8.         for(++s; s < e; ++s){
  9.                 for(i = e - 1; i >= s; --i){
  10.                         if(*i < *(i - 1)){
  11.                                 c  = *i;
  12.                                 *i = *(i - 1);
  13.                                 *(i - 1) = c;
  14.                         }
  15.                 }
  16.         }
  17.         return d;
  18. }
  19.  
  20. //2-ой вариант
  21. char* bsort2(char* s){
  22.         int  go;
  23.         char c, *d = s;
  24.         if(! *s)
  25.                 return d;
  26.                
  27.         do {
  28.                 go = 0;
  29.                 for(s = d + 1; *s; ++s){
  30.                         if(*s < *(s - 1)){
  31.                                 c  = *s;
  32.                                 *s = *(s - 1);
  33.                                 *(s - 1) = c;
  34.                                 go = 1;
  35.                         }
  36.                 }
  37.         }while(go);
  38.         return d;
  39. }
  40.  
  41. int main(void){
  42.         char s1[] = "QWERTYUIOPASDFGHJKLZXCVBNM";
  43.         char s2[] = "XXZZAAWWDDBBFFCCMMOOEEGGYY";
  44.        
  45.         puts(s1);
  46.         puts( bsort1(s1) );
  47.         putchar('\n');
  48.      
  49.         puts(s2);
  50.         puts( bsort2(s2) );
  51.         return 0;
  52. }

Объяснение кода листинга программы

Код представляет собой функцию сортировки массива символов по убыванию. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы