Отсортировать последовательность по убыванию модифицированным методом простого выбора - C (СИ)
Формулировка задачи:
Расположить положительные элементы последовательности по убыванию модифицированным методом простого выбора.
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
int main()
{
int a[N],i,min,j,buf;
srand(time(0));
printf("Ishodnii massiv:\n");
for (i=0;i<N;i++)
{
printf("a[%i]=%3i\n",i,a[i]=rand()%100-50);
}
for (i=0;i<N-1;i++)
{
min=i;
for (j=i+1;j<N;j++)
if (a[j]>a[min]) min=j;
buf=a[i];
a[i]=a[min];
a[min]=buf;
}
printf("\n");
printf("Otsortirovannii massiv:\n");
for (i=0;i<N;i++)
{
printf("a[%i]=%3i\n",i,a[i]);
}
getch();
return 0;
}Как сделать так чтобы отрицательные элементы оставались на своих местах после сортировки?
Решение задачи: «Отсортировать последовательность по убыванию модифицированным методом простого выбора»
textual
Листинг программы
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
int main()
{
int a[N],i,min,j,buf, y;
srand(time(0));
printf("Ishodnii massiv:\n");
for (i=0;i<N;i++)
printf("a[%i]=%3i\n",i,a[i]=rand()%100-50);
for (i=0;i<N-1;i++)
{
y=i;
while(a[y]<0 && y<N-1)
y++;
min=y;
for (j=i+1;j<N;j++)
if (a[j]>a[min] && a[j]>-1 && a[i]>-1)
min=j;
if(a[i]>-1)
{
buf=a[i];
a[i]=a[min];
a[min]=buf;
}
}
printf("\n");
printf("Otsortirovannii massiv:\n");
for (i=0;i<N;i++)
{
printf("a[%i]=%3i\n",i,a[i]);
}
getch();
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяется размер массива N
- Инициализируется генератор случайных чисел
- Выводится исходный массив
- Реализуется сортировка методом простого выбора с использованием временной переменной buf для хранения значения элемента, который нужно переместить
- Выводится отсортированный массив
- Ждется нажатие клавиши для выхода из программы
- Возвращается 0, чтобы указать, что программа успешно завершилась