Сортировка массива по возрастающей - 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; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
- stdlib.h для функции malloc() и free(), которые используются для выделения и освобождения памяти;
- printf() и scanf() в stdio.h;
- time.h для функции time(), которая используется для инициализации генератора случайных чисел;
- stdbool.h для поддержки логических типов данных в компиляторе.
- Задаем начальное значение для генератора случайных чисел с помощью функции srand(time(NULL)). Это важно, чтобы каждый раз при запуске программы генерировался новый набор случайных чисел.
- Запрашиваем у пользователя размер массива с помощью функции scanf(). Это значение будет использоваться для выделения памяти под массив.
- Выделяем память под массив с помощью функции malloc(). Размер памяти, который мы выделяем, зависит от значения N, введенного пользователем.
- Заполняем массив случайными числами с помощью цикла for и функции rand(). Для получения случайного числа в диапазоне от 0 до 9 мы используем оператор % (остаток от деления).
- Выводим исходный массив на экран с помощью цикла for и функции printf().
- Сортируем массив с помощью алгоритма сортировки пузырьком. Для этого используем два вложенных цикла for. Внутренний цикл проходит по элементам массива от i до N-1. Если текущий элемент больше следующего, то они меняются местами.
- Выводим отсортированный массив на экран с помощью цикла for и функции printf().
- Освобождаем память, выделенную под массив, с помощью функции free().
- Возвращаем 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д