C/C++

Помогите с задачей на языке СИ

В целочисленном векторе vectorn найти его вторые по значению минимальный и максимальный элементы и поменять их местами. Предусмотреть случай, когда таких элементов нет.
То, что я пытался написать:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>
int main()
{
int i, n, m, vector_min, vector_max, min, max, i_min, i_max, temp;
time_t t; // текущее время для инициализации
// генератора случайных чисел
srand((unsigned) time(&t)); // инициализация генератора
// случайных чисел
printf("\nEnter left limit: ");
scanf("%d", &vector_min);
printf("\nEnter right limit: ");
scanf("%d", &vector_max);
printf("\nEnter size of vector: ");
scanf("%d", &n);

int vector[n];
printf("\nFirst vector:\n");
m = vector_max-vector_min + 1;
for (i=0; i<n; i++)
{
// получение случайного числа в диапазоне
// от vector_min до vector_max
vector[i]=rand()% m + vector_min;
printf(" %5d", vector[i]);
}
printf("\n");
max = vector[0];
i_max = 0;
min = vector[0];
i_min = 0;
for (i=0; i<n ; i++) //цикл поиска max и min
{
if (vector[i] > max)
{
max = vector[i];
i_max = i;
}

if (vector[i] < min)
{
min = vector[i];
i_min = i;
}
}
printf("\nmax=%d i_max=%d", max, i_max);
printf("\nmin=%d i_min=%d\n", min, i_min);
int a, b;
a = i_min;
b = i_max;
max = vector[i_min];
min = vector[i_max];
i_max = 0;
i_min = 0;
for (i=0; i<n ; i++) //второй цикл поиска max и min
{
if ((i == a) || (i == b))
continue;
if (vector[i] > max)
{
max = vector[i];
i_max = i;
}
if (vector[i] < min)
{
min = vector[i];
i_min = i;
}
}
printf("\nmax=%d i_max=%d", max, i_max);
printf("\nmin=%d i_min=%d\n", min, i_min);
m=abs(i_min-i_max)-1;
if (m==0 || m==1)
{
printf("Beetween this means 1 or none elements");
}
else
{
if (i_max > i_min)
{
a=++i_min;
b=--i_max;
}
else
{
a=++i_max;
b=--i_min;
}
}
printf("\nResult vector:\n");
for (i=0; i<n; i++)
printf(" %5d", vector[i]);
printf("\n");
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
void swap(int* a, int* b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
typedef struct {
int value;
int index;
} Second;
int less(const void* a, const void* b) {
if (*((int*)a) < *((int*)b)) return -1;
if (*((int*)a) > *((int*)b)) return 1;
return 0;
}
Second find_min(int* box, int length) {
int* tmp = (int*)malloc(length * sizeof(int));
int i = 0;
Second second;
second.index = i;
second.value = box[i];
int min;
for (i = 0; i < length; ++i) tmp[i] = box[i];
qsort(tmp, length, sizeof(int), less);
min = tmp[0];
for (i = 1; i < length; ++i) if (tmp[i] > min) {
min = tmp[i];
break;
}
for (i = 0; i < length; ++i) if (min == box[i]) break;
if (i != length) {
second.index = i;
second.value = box[i];
}
free(tmp);
return second;
}
int greater(const void* a, const void* b) {
if (*((int*)a) < *((int*)b)) return 1;
if (*((int*)a) > *((int*)b)) return -1;
return 0;
}
Second find_max(int* box, int length) {
int* tmp = (int*)malloc(length * sizeof(int));
int i = 0;
Second second;
second.index = i;
second.value = box[i];
int max;
for (i = 0; i < length; ++i) tmp[i] = box[i];
qsort(tmp, length, sizeof(int), greater);
max = tmp[0];
for (i = 1; i < length; ++i) if (tmp[i] < max) {
max = tmp[i];
break;
}
for (i = 0; i < length; ++i) if (max == box[i]) break;
if (i != length) {
second.index = i;
second.value = box[i];
}
free(tmp);
return second;
}
int main(void) {
int n;
int v_min, v_max;
int* vec = NULL;
int i;
Second min;
Second max;
printf("n=");
scanf("%i", &n);
printf("v_min=");
scanf("%i", &v_min);
printf("v_max=");
scanf("%i", &v_max);
++v_max;
vec = (int*)malloc(n * sizeof(int));
for (i = 0; i < n; ++i) vec[i] = RAND(v_min, v_max);
for (i = 0; i < n; ++i) printf("%4i", vec[i]);
puts("");
min = find_min(vec, n);
max = find_max(vec, n);
if (min.index != max.index) {
printf("min_2=%i n_min_2=%i\n", min.value, min.index + 1);
printf("max_2=%i n_max_2=%i\n", max.value, max.index + 1);
swap(vec + min.index, vec + max.index);
for (i = 0; i < n; ++i) printf("%4i", vec[i]);
puts("");
} else {
puts("Not found!");
}
free(vec);
return 0;
}
СФ
Саша Фунтиков
55 832
Лучший ответ