Сортировка массива по возрастающей - C (СИ)

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

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

Здравствуйте! Необходимо отcортировать массив по возрастающей. Суть проблемы в том, что 0 и 1 элементы массива не меняются местами, а со всеми остальными все в порядке. Скажите, что делаю неправильно?
Листинг программы
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4. #include <stdbool.h>
  5. int main(){
  6. srand(time(NULL));
  7. int N;
  8. printf("N=");
  9. scanf("%d",&N);
  10. int*tab=(int*)malloc(sizeof(int)*N);
  11. int element;
  12. for(int i=0;i<N;i++){
  13. element=rand()%10;
  14. tab[i]=element;
  15. }
  16. printf("Elements: \n");
  17. for(int i=0;i<N;i++){
  18. printf("%d ",tab[i]);
  19. }
  20. int first,second;
  21. for(int i=0;i<n-1;i++){
  22. first=tab[i];
  23. second=tab[i+1];
  24. if(second<first){
  25. tab[i]=second;
  26. tab[i+1]=first;
  27. i=0;
  28. }
  29. }
  30. printf("\n New: \n");
  31. for(int i=0;i<N;i++){
  32. printf("%d ",tab[i]);
  33. }
  34. return 0;
  35. }
Заранее спасибо!

Решение задачи: «Сортировка массива по возрастающей»

textual
Листинг программы
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4. #include <stdbool.h>
  5. int main(){
  6.    srand(time(NULL));
  7.  
  8.    int N;
  9.    printf("N=");
  10.    scanf("%d",&N);
  11.    int*tab=(int*)malloc(sizeof(int)*N);
  12.  
  13.       int  n;
  14.       for(int i=0;i<N;i++){
  15.       tab[i]=rand()%10;
  16.       }
  17.  
  18.       printf("Elements: \n");
  19.       for(int i=0;i<N;i++){
  20.          printf("%d ",tab[i]);
  21.       }
  22.  puts("");
  23.       int tmp;
  24.     for(int i=0; i<N; ++i)
  25.     {
  26.         for(int j=i; j<N; ++j)
  27.             if(tab[i]>tab[j])
  28.             {
  29.                 tmp=tab[i]; tab[i]=tab[j]; tab[j]=tmp;
  30.             }
  31.     }
  32.       printf("\n New: \n");
  33.       for(int i=0;i<N;i++){
  34.          printf("%d ",tab[i]);
  35.       }
  36. return 0;
  37. }

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

  1. Включаем необходимые заголовочные файлы:
    • stdlib.h для функции malloc() и free(), которые используются для выделения и освобождения памяти;
    • printf() и scanf() в stdio.h;
    • time.h для функции time(), которая используется для инициализации генератора случайных чисел;
    • stdbool.h для поддержки логических типов данных в компиляторе.
  2. Задаем начальное значение для генератора случайных чисел с помощью функции srand(time(NULL)). Это важно, чтобы каждый раз при запуске программы генерировался новый набор случайных чисел.
  3. Запрашиваем у пользователя размер массива с помощью функции scanf(). Это значение будет использоваться для выделения памяти под массив.
  4. Выделяем память под массив с помощью функции malloc(). Размер памяти, который мы выделяем, зависит от значения N, введенного пользователем.
  5. Заполняем массив случайными числами с помощью цикла for и функции rand(). Для получения случайного числа в диапазоне от 0 до 9 мы используем оператор % (остаток от деления).
  6. Выводим исходный массив на экран с помощью цикла for и функции printf().
  7. Сортируем массив с помощью алгоритма сортировки пузырьком. Для этого используем два вложенных цикла for. Внутренний цикл проходит по элементам массива от i до N-1. Если текущий элемент больше следующего, то они меняются местами.
  8. Выводим отсортированный массив на экран с помощью цикла for и функции printf().
  9. Освобождаем память, выделенную под массив, с помощью функции free().
  10. Возвращаем 0, чтобы указать, что программа успешно завершилась.

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


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

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

6   голосов , оценка 3.667 из 5

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

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

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