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