@mpvcluuuuub

В чем ошибка моего алгоритма сортировки массива?

есть массив, динамический, задается случайным образом с помощью функции rand в диапазоне [0;2], нужно отсортировать его так, чтобы начинался он с 1, потом шли нули, а в конце двоечки, при этом не создавая новых массивов и не используя библиотеки стандартных алгоритмов ну и т.п., ниже кусок с моим алгоритмом сортировки, но он почему-то не работает, сортируются только единицы в начало, а потом что-то идет не так. Только начал изучать программирование, извиняюсь за глупый вопрос

int endOfFirstCycle;
	int* end = &endOfFirstCycle;

	for (int i = 0; i < N; i++) {
		int firstElement = i;
		for (int currentElement = firstElement; currentElement < N; currentElement++) {
			if (array[currentElement] == 1) {
				int temp = array[currentElement];
				array[currentElement] = array[firstElement];
				array[firstElement] = temp;
				*end = currentElement + 1;
			} 
		}
	}

	for (int i = *end; i < N; i++) {
		int firstElement = i;
		for (int currentElement = firstElement; currentElement < N; currentElement++) {
			if (array[currentElement] == 0) {
				int temp = array[currentElement];
				array[currentElement] = array[firstElement];
				array[firstElement] = temp;
			}
		}
	}
  • Вопрос задан
  • 82 просмотра
Решения вопроса 2
zagayevskiy
@zagayevskiy
Android developer at Yandex
Если задача стоит именно так, то она решается в два прохода. Первым проходом считаешь количество нулей, единиц и двоек, вторым проходом заполняешь массив заново, исходя из подсчитанного количества.
Ответ написан
@Nijat19
Люблю математику
Я бы посоветовал тебе использования более короткие имена, иначе, как в твоём случае, страдает читабельность.
На счёт алгоритма, тебе нужна сортировка подсчётом. Коротко, нужно пройтись по исходному массиву и посчитать количество 0, 1, 2, затем нужно в указанном порядке записать в исходный массив.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы