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