Member 12409720 Ответов: 2

Расширенная сортировка выбора, найдите два минимума в массиве!


Эй, ребята!
мой вопрос состоит в том , чтобы сделать "алгоритм сортировки выбора" более продвинутым ,найти два минимума в массиве ,где (min_2>min_1), а затем отсортировать его в соответствии с алгоритмом, который должен быть использован, я написал код, который правильно найдет два минимума, но моя проблема заключается в том, где я должен поставить функцию "swap", чтобы правильно отсортировать массив.
есть какие-нибудь предложения, пожалуйста?

Что я уже пробовал:

<pre>
#include<iostream>
using namespace std;
void swap(int &x, int &y)
{
	int temp;
	temp = x;
	x = y;
	y = temp;

}
void Sort(int a[], int n)
{
	int min, min2, i;
	for (i = 0; i < n - 1; i += 2){
		min = i;
		min2 = i + 1;
		if (a[min]>a[min2])
		{
			swap(a[min],a[min2]);
		}

		for (int j = 0; j < n; j++)
		{
			if (a[j] < a[min]){

				min2 = min;
				min = j;
			
			}
			

			else if (a[j] < a[min2]){
			
				min2 = j;


			}
		}
		
	}
	cout << a[min] << endl;
	cout << a[min2] << endl;

}

2 Ответов

Рейтинг:
14

Richard MacCutchan

if (a[min]>a[min2])
{
    min2 = min;
    min = min2;
}

Это установит оба значения на то, что было в min. Вы должны использовать swap для того, чтобы обменяться ценностями.


Member 12409720

да, конечно, спасибо
но это не единственный раз, когда я вызову функцию swap, верно?

Richard MacCutchan

Да, это должно быть так, если ваш цикл сортировки выполняется до завершения.

Member 12409720

может быть, я не понял, что ты говоришь

Richard MacCutchan

Вам нужна только одна петля для сортировки пузырьков. Вы просто продолжаете повторять до тех пор, пока не исчезнет необходимость в свопах.

Member 12409720

это не пузырьковая сортировка ,а сортировка выбора, так что у нас все еще есть 2 цикла

Richard MacCutchan

Я думаю, что вам все еще нужно только поменять местами элементы в одном месте.

Member 12409720

да, я так думаю , но я назову это дважды, верно?
один для обмена мин с i
а другой для min2 и (i+1)?

Richard MacCutchan

Я не знаю, но лучший способ узнать это-попробовать.

Рейтинг:
0

Patrice T

min2 = min;
min = min2;

Этот код пытается поменять местами 2 int, почему бы вам не использовать ту же технику, что и в вашей функции swap ?

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Member 12409720

я решаю проблему подкачки между min и min2 ,спасибо.
честно говоря, я знаю, что мой код действительно делает ,он находит мин и следующую мин
Я попросил помощи о том, когда я помещу функцию swap в этот код для сортировки данного массива