259 / 76 / 16
Регистрация: 05.04.2018
Сообщений: 1,026
Записей в блоге: 1
1

Сортировка одномерного массива по возрастанию методом выбора

05.07.2018, 16:32. Показов 4981. Ответов 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
void sort(int arr[], int size)
{
    int max, index, temp;
    
    for(int i = size - 1; i >= 1; --i)  //с конца проходим до первого эл-та
    {
        max = arr[i];  //наш буфер для максимального значения
        
        for(int j = i - 1; j >= 0; --j) //от следующего элемента по итерации к первому в массиве (для сравнения след эл-та с i-тым). И нахождения максимального значения от i до arr[0]
        {
            if(max < j)  //если наш i меньше следующего эл-та (j)
            {
                max = arr[j];  //то присваиваем ему это значение, иначе, нашли максимальный элемент в массиве
                index = j;  //индекс с помощью которого будем обращаться к элементу j
            }
        }
        
        temp = arr[index];  //переменная темп для того, чтобы потом последнему элементу по итерации присвоить мах
        
        for(int x = index; x < i; ++x){  // итерируемся от эл-та, в котором расположен мах
            arr[x] = arr[x + 1];  //теперь, когда наш максимальный эл-т сохранен в буфер мы можем его затереть
        }  //сдвинув элементы влево.
        
        arr[i] = temp;  //в "освобожденный" элемент записываем мах
    }
}
main:
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
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
 
void sort(int [], int);
 
int main ()
{
    srand(time(NULL));
    int size = 10;
    int *array = new int[size];
    
    cout << "Without sort:\n";
    for(int i = 0; i < size; ++i){
        array[i] = 1 + rand() % 8;
        cout << setw(4) << array[i];
    }
    
    sort(array, size);
    
    cout << "\n\nAfter sort:\n";
    for(int i = 0; i < size; ++i){
        cout << setw(4) << array[i];
    }
    
    delete[]array;
 
    return 0;
}
вроде бы все четка, но чет не работает.
Хотя, я аналогично делал с тем лишь различием, что минимальный элемент перемещал в конец и все работало! Только тогда получается сортировка по убыванию, а я теперь хочу по возрастанию!
....
Черт! сделал сейчас снова по убыванию и не работает! как так то! как так?!!!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2018, 16:32
Ответы с готовыми решениями:

Сортировка одномерного массива методом выбора
Сортировка одномерного массива методом выбора.для N=10,100, 1000,15000

Сортировка одномерного массива методом выбора
#include &lt;iostream&gt; using namespace std; #include &lt;math.h&gt; #include &lt;conio.h&gt; int main() {...

Сортировка одномерного массива целых чисел по возрастанию методом быстрой сортировки
Написать программу для сортировки одномерного массива целых чисел по возрастанию методом быстрой...

Сортировка матрицы по возрастанию методом выбора максимума
Здравствуйте! Нужно отсортировать матрицу по возрастанию методом выбора максимума в соответствии с...

2
Модератор
Эксперт С++
12104 / 9775 / 5910
Регистрация: 18.12.2011
Сообщений: 26,246
05.07.2018, 16:41 2
Лучший ответ Сообщение было отмечено Джон Кофи как решение

Решение

Цитата Сообщение от Джон Кофи Посмотреть сообщение
if(max < j) //если наш i меньше следующего эл-та (j)
C++
1
if(max <arr[j]) //если наш i меньше следующего эл-та (j)
Добавлено через 1 минуту
Цитата Сообщение от Джон Кофи Посмотреть сообщение
max = arr[i]; //наш буфер для максимального значения
C++
1
2
max = arr[i]; //наш буфер для максимального значения
index=i;
1
259 / 76 / 16
Регистрация: 05.04.2018
Сообщений: 1,026
Записей в блоге: 1
05.07.2018, 16:45  [ТС] 3
zss,
Цитата Сообщение от zss Посмотреть сообщение
1
if(max <arr[j]) //если наш i меньше следующего эл-та (j)
я заметил это за минуту до вашего сообщения, но не помогло.

Добавлено через 2 минуты
Цитата Сообщение от zss Посмотреть сообщение
max = arr[i]; //наш буфер для максимального значения
index=i;
спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2018, 16:45
Помогаю со студенческими работами здесь

Сортировка одномерного массива по возрастанию методом прямого выбора
разработать программу реализующию сортировку одномерного массива по возрастанию методом прямого...

Рекурсивный метод сортировки одномерного массива по возрастанию методом выбора
Добрый вечер. Помогите пожалуйста организовать рекурсивный метод сортировки одномерного массива по...

Сортировка одномерного массива методом выбора
Здравствуйте, подскажите кто может, по заданию мне нужно&quot;Сортировка выбором: отыскивается...

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


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

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

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