Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2016, 11:19   #1
ShuricFC
Пользователь
 
Регистрация: 17.09.2016
Сообщений: 25
По умолчанию Сортировка методом выбора

Здравствуйте! Подскажите пожалуйста как посчитать количество перемещений первого элемента при сортировке выбором?
ShuricFC вне форума Ответить с цитированием
Старый 20.09.2016, 11:28   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я бы завёл две переменные: счётчик и индекс позиции, в которой находится первый элемент.
инициализация:
счётчик присвоить ноль.
индекс_первого присвоить позицию первого элемента в хранилище.

в цикле сортировки:
при каждом обмене проверять, совпадает ли индекс обмениваемого элемента с индексом_первого, если да - то наращивать счётчик и изменять индекс_первого на новую позицию.

всё.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.09.2016, 11:39   #3
ShuricFC
Пользователь
 
Регистрация: 17.09.2016
Сообщений: 25
По умолчанию

Помогите пожалуйста куда вставить!
Код:
include "stdafx.h" 
#include <iostream> 
#include "fstream" 
using namespace std; 
#define max 100000 
int mas[max+1]; 
void SelectionSort(int k, int mas[max]) { 
int i, j, min, temp,kol=0; 
for (i = 0; i<k - 1; i++) { 
//устанавливаем начальное значение минимального индекса 
min = i; 
//находим минимальный индекс элемента 
for (j = i + 1; j<k; j++) { 
if (mas[j]<mas[min]) 
min = j; 
//меняем значения местами 
} 
temp = mas[i]; 
mas[i] = mas[min]; 
mas[min] = temp; 
} 
cout « kol; 
} 


int main() { 
int n; 
ifstream f("input.txt"); 
ofstream f1("output.txt"); 
cin» n; 

for (int i = 0; i < n; i++) 
cin» mas[i]; 

SelectionSort(n, mas); 

for (int i = 0; i < n; i++) 
cout« mas[i] « " "; 


return 0; 
}
ShuricFC вне форума Ответить с цитированием
Старый 20.09.2016, 15:22   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, если я правильно понял задачу и ничего не напутал в синтаксисе C,
то Вам поможет такой код:

Код:
void SelectionSort(int k, int mas[max]) { 
	int i, j, min, temp,kol=0, index_0=0; 
	for (i = 0; i<k - 1; i++) { 
		//устанавливаем начальное значение минимального индекса 
		min = i; 
		//находим минимальный индекс элемента 
		for (j = i + 1; j<k; j++) { 
			if (mas[j]<mas[min]) 
				min = j; 
		} 
		//меняем значения местами
		if(min != i) {
			temp = mas[i]; 
			mas[i] = mas[min]; 
			mas[min] = temp;
			if((index_0==i)||(index_0==min)) {
				kol++;
				index_0=(index_0==i)?min:i;
			}
		}
	} 
	cout « kol; 
}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.09.2016, 21:13   #5
ShuricFC
Пользователь
 
Регистрация: 17.09.2016
Сообщений: 25
По умолчанию

Спасибо большое! Очень помогли!
ShuricFC вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка массива методом выбора в с++ mary1010 Помощь студентам 1 16.10.2012 20:12
C++ сортировка методом выбора zaki Помощь студентам 0 12.12.2011 16:45
Сортировка методом выбора dinamit_2011 C++ Builder 0 23.02.2011 16:40
сортировка методом выбора...паскаль... Оксаночка:) Помощь студентам 5 29.06.2009 23:26