0 / 0 / 2
Регистрация: 24.04.2018
Сообщений: 61
1

Сортировка элементов в массиве по убыванию

22.05.2018, 16:34. Показов 878. Ответов 2

Author24 — интернет-сервис помощи студентам
День добрый! Получил очередное задание, но не могу реализовать его в виду нехватки знаний.

Необходимо написать функцию void*minSort(int**a,*int*n),, которая сортирует элементы массива по убыванию, т.е. а[0] наибольшее значение a[n-1] наименьшее.

1. Находит минимальный элемент в массиве а , сохраняя его значение и индекс.
2. Меняет местами минимальный элемент с последним. Используя другую функцию swap (int *a, int *b).
3. Поиск необходимо начинать с начала массива , но не затрагивать уже отсортированную часть этого массива. Последний найденный элемент, считается отсортированным и не принимает участие в дальнейшей сортировке.
4. Функция должна останавливаться, если в не отсортированной части массива не осталось больше элементов.


Вот , что у меня вышло. Но сортировка проходит наоборот, не так как мне надо. Может у кого есть идеи, как реализовать данную функцию?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
void minSort ();
 
int main()
{
    int b;
 
 
    printf("Geben Sie N:");
    scanf("%i", &b);
 
    int a[b];
 
    srand(time(NULL));
 
    for (int i = 0; i < b; i++)
    {
        a[i] =rand() %100;
    }
 
 
    minSort(a, b);
 
    for (int i = 0; i<b; i++)
        printf("%d = %i \n", a[i], i);
 
    return 0;
}
 
void swap (int * a, int * b)
{
 
    if (a == NULL || b == NULL)
        return;
 
    int tmp = *a;
    *a = *b;
    *b = tmp;
 
    return;
}
 
 
 
void minSort (int* a, int n)
{
    int min;
    int *o;
    int *p;
    for (int i = 0; i < n-1 ; ++i)
    {
        min = i;
 
        for (int j = i + 1; j < n; ++j)
        {
            if (a[j] < a[min])
                min = j;
        }
        o=&a[i];
        p=&a[min];
 
        swap(o,p);
        {
 
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2018, 16:34
Ответы с готовыми решениями:

Сортировка четных элементов массива по возрастанию, а нечетных-по убыванию
Задача в общем такая: Дан целочисленный массив.Отсортировать его четные элементы по возрастанию, а...

Дана матрица M*N. Сортировка положительных элементов по убыванию, остальных - по возрастанию. Нули в конце
Добрый вечер! Дан массив M*N. Необходимо отсортировать ее по строкам так, чтобы вначале шли все...

Сортировка элементов в двумерном массиве
есть массив int mas; нужно сорт. строк так чтобы первые элементы колонки были расположены в...

Сортировка строк по убыванию сумм элементов строк
Я рандомно задал массив M x N: #include &lt;stdio.h&gt; #include &lt;time.h&gt; #include &lt;conio.h&gt; #define...

2
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,220
23.05.2018, 13:30 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// размер массива:
#define N 10
 
void minSort(int *, int);   // алгоритм сортировки по убыванию
void swap(int *, int *);    // меняет два числа местами
 
int main (void)
{
    srand(time(NULL));      // новая точка отсчета рнд
    int a[N], i;
    // заполним массив случайными:
    for (i=0; i<N; i++)
        a[i] = rand() %N;
 
    // выведем массив на экран:
    for (i=0; i<N; i++)
        printf("%2d", a[i]);
    printf("\n\n");
 
    // отсортируем по убыванию:
    minSort(a, N);
 
    // снова выведем на экран:
    for (i=0; i<N; i++)
        printf("%2d", a[i]);
    printf("\n");
 
    // конец программы
    return 0;
}
// ------------------------------------------------------------
void minSort(int * a, int n)
{
    int i, k, m;
    for (k=n-1; k>-1; k--)
    {
        m = 0;                          // примем, что первый элемент массива и есть минимальное число
        for (i=k; i>-1; --i)            // тепеь найдем индекс по-настоящему наименьшего элемента
            if (a[i] < a[m]) m = i;     // если элемент массива i меньше минимального, значит он и есть минимальный
        if (a[k] != a[m])               // после этого цикла нам нужно поменять первый c конца элемент массива и найденный минимальный местами
            swap(&a[k], &a[m]);         // однако если элементы равны, то и менять нет смысла
    }
}
// ------------------------------------------------------------
void swap(int * a, int * b)
{
    int t = *a;
    *a = *b;
    *b = t;
}
0
0 / 0 / 2
Регистрация: 24.04.2018
Сообщений: 61
24.05.2018, 15:04  [ТС] 3
Спасибо за вашу помощ. Но цикл ищет с конца, у меня в задании стоит, что поиск необходимо начинать каждый раз с начала массива. То есть цикл пробегается с начала в конец, в последующем с начала и до отсортированой части, не затрагивая ее.
0
24.05.2018, 15:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2018, 15:04
Помогаю со студенческими работами здесь

Сортировка по убыванию в одномерном массиве
Сформировать одномерный массив действительными случайными числами в диапазоне (K, L), N=12....

Сортировка главной диагонали по убыванию в двумерном массиве
Приветствую. Нужно отсортировать главную диагональ по убыванию. Сколько тем уже пересмотрел,...

Сортировка элементов не по убыванию
Дано натуральное N (1&lt;=N&lt;=10), целочисленный квадратный массив-матрица (aij), 0&lt;= i ,j &lt;N....

Сортировка массива по убыванию элементов
Скажите пожалуйста, что не так, если не так, в этом коде) Задание: отсортировать массив по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru