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