Как отсортировать динамический массив?

Необходимо реализовать в C++ с использованием классов сортировку динамического массива двусторонним экстремумом. Подскажите, почему на экран выводится неотсортированный массив?
#include <iostream>
#include <cstdlib>

using namespace std;

class clSorting{
	public:
	int *Arr;
	int max, min, n, k, size; // сортировке подвергаются элементы массива с индексами от k до n
	clSorting();
	int lookingForMax();
	int lookingForMin();
	void swap(int a, int b);
	void sortThis();
	~clSorting();
};

/* Конструктор класса */
clSorting::clSorting(){
	cout << "Please, input size of your array: ";
	cin >> n;
	size = n;
	cout << endl << "Thank you. Wait, please..." << endl;
	Arr = new int[n];
	for (int i = 0; i < n; i++){
		cout << "Input an element of array: ";
		cin >> Arr[i];
		cout << endl << "Got it.";
	}
	cout << endl;
}

/* Метод поиска максимума из массива, n - размер массива */
int clSorting::lookingForMax(){
	max = Arr[k];
	for (int i = k + 1; i < n; i++){
		if (Arr[i]>max) {
			max = Arr[i];
		}
	}
	return max;
}

/* Метод поиска минимума из массива, n - размер массива */
int clSorting::lookingForMin(){
	min = Arr[k];
	for (int i = k + 1; i < n; i++){
		if (Arr[i]<min) {
			min = Arr[i];
		}
	}
	return min;
}

/* Метод, который меняет два числа местами */
void clSorting::swap(int a, int b){
	a = a + b;
	b = a - b;
	a = a - b;
}

/* Метод сортировки массива размера n */
void clSorting::sortThis(){
	k = 0;
	while (k < n){
		swap(Arr[k], lookingForMin());
		k++;
		swap(lookingForMax(), Arr[n]);
		n--;
	}
}

int main(int argc, char** argv){
	clSorting *A = new clSorting();
	A->sortThis();
	cout << "I have sorted your massive:" << endl;
	for (int i = 0; i < A->size; i++){
		cout << A->Arr[i] << " ";
	}
	system("PAUSE");
	return 0;
}
  • Вопрос задан
  • 4593 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Power
Ваш "Метод, который меняет два числа местами" на самом деле не делает вообще ничего (передача аргументов по значению и всё такое). И у вас изначально неправильный подход - вы запоминаете min/max, но не запоминаете их индексы в массиве.
Ответ написан
@algol
Код изначально написан неверно. Лучше, что с ним можно сделать, удалить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы