Отсортировать массив символов по убыванию - 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 соответственно. Результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д