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

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

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

Здравствуйте! Необходимо отcортировать массив по возрастающей. Суть проблемы в том, что 0 и 1 элементы массива не меняются местами, а со всеми остальными все в порядке. Скажите, что делаю неправильно?
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <stdbool.h>
int main(){
   srand(time(NULL));
 
   int N;
   printf("N=");
   scanf("%d",&N);
   int*tab=(int*)malloc(sizeof(int)*N);
 
      int element;
      for(int i=0;i<N;i++){
         element=rand()%10;
         tab[i]=element;
      }
 
      printf("Elements: \n");
      for(int i=0;i<N;i++){
         printf("%d ",tab[i]);
      }
 
      int first,second;
      for(int i=0;i<n-1;i++){
               first=tab[i];
               second=tab[i+1];
                  if(second<first){
                        tab[i]=second;
                        tab[i+1]=first;
                        i=0;
                  }
            }
      printf("\n New: \n");
      for(int i=0;i<N;i++){
         printf("%d ",tab[i]);
      }
return 0;
}
Заранее спасибо!

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

textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <stdbool.h>
int main(){
   srand(time(NULL));
 
   int N;
   printf("N=");
   scanf("%d",&N);
   int*tab=(int*)malloc(sizeof(int)*N);
 
      int  n;
      for(int i=0;i<N;i++){
      tab[i]=rand()%10;
      }
 
      printf("Elements: \n");
      for(int i=0;i<N;i++){
         printf("%d ",tab[i]);
      }
 puts("");
      int tmp;
    for(int i=0; i<N; ++i)
    {
        for(int j=i; j<N; ++j)
            if(tab[i]>tab[j])
            {
                tmp=tab[i]; tab[i]=tab[j]; tab[j]=tmp;
            }
    }
      printf("\n New: \n");
      for(int i=0;i<N;i++){
         printf("%d ",tab[i]);
      }
return 0;
}

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

  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
Похожие ответы