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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2011, 08:19   #1
Belka.ru
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 11
По умолчанию Задача по сортировке.С++.

всем привет.прошу помочь доделать код.

Задача:Отсортировать один и тот же массив тремя методоми сортировки-Обменом,Выбором и Вставками.вывести количество присваиваний и сравнений.

мой код:
Код:
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main ()
{
	setlocale(LC_ALL,"Russian");
	const int n=10;
	int x[n],i,j,q=0,z=0,k,t,m,h,temp;
	cout << "Задайте массив из " << n << " элементов для сортировки обменом" << endl;
	srand (time(NULL));
	for (i=0;i<n;i++)
		cin >> x[i];
	cout << endl;
		for (i=0;i<n;i++)
			for (j=n-1;j>i;j--,q++)
			{
		if (x[j-1]>x[j])
		{
			m=x[j-1];
			x[j-1]=x[j];
			x[j]=m;
			z++;
		}
			}
		for (i=0;i<n;i++)
		cout << x[i] << " ";
	cout << endl;
	cout << "количество сравнений = " << q << "\n";
	z=z*3;
	cout << "количество присваиваний = " << z << "\n";
	cout << endl;
	cout << "Введите тот же массив для сортировки методом выбора";
	cout << endl;
	for (i=0;i<n;i++)
		cin >> x[i];
	cout << endl;
	int imin;
	q=0;z=0;
	for (i=0;i<n;i++)
	{
		k=i,imin=x[i];
		for(j=i+1;j<n;j++,q++)
			if(x[j]<imin)
			{
				k=j,imin=x[j];
			}
		x[j]=x[i];
		x[i]=imin;
		z++;
	}
	for (i=0;i<n;i++)
	cout << x[i] << " ";
	cout << endl;
	cout << "количество сравнений = " << q << "\n";
	z=z*3;
	cout << "количество присваиваний = " << z << "\n";
	cout << endl;
	cout << "Введите тот же массив для сортировки методом вставки" << endl;
	cout << endl;
	int w;
	for(i=0;i<n;i++)
		cin >> x[i];
	q=0,z=0;
	for (i=0;i<n;i++)
	{
		w=x[i];
		for (j=i-1;j>=0 && x[j] > w;j--,q++)
			x[j+1]=x[j];
		x[j+1]=w;
		z++;
	}
				for (i=0;i<n;i++)
	cout << x[i] << " ";
				cout << endl;
				cout << "Количество сравнений = " << q << endl;
				z=z*3;
				cout << "Количество присваиваний = " << z << endl;
	system("pause >> void");
	return 0;
}
тут работает первый метод(обмена),а вот в методе выбора программа глючит.она выводит для любого массива количество присваиваний = 45, а количество сравнений = 30.

такой же глюк в сортировке вставками.программа всегда выводит количество сравнений = 30.

прошу помочь
Belka.ru вне форума Ответить с цитированием
Старый 07.12.2011, 09:06   #2
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Сортировка выбором

Код:
#include <stdio.h>
#include <stdlib.h>


void formArr(int* pArr, int n) {
	int i;
	
	srand(time(0));
	for (i=0; i<n; i++) {
		*pArr++ = rand() % 100;
	}
}

void input(int arr[], int n, char s[]) {
	int i;
	
	puts(s);
	for (i=0; i<n; i++) {
		printf("%d \t", arr[i]);
	}
	printf("\n");
}

void main() {
	int n, arr[100], i, m, j;
	
	printf("введите размер массива: ");
	scanf("%d", &n);
	
	formArr(&arr[0], n);
	input(arr, n, "\n массив до сортировки: \n");
		
	for (i=0; i<n-1; i++) {
		m=i;
		for (j=i+1; j<n; j++) {
			if (arr[m]>arr[j]) { 				 
				m=j;
			}
		}
		
		j=arr[i];  arr[i]=arr[m];  arr[m]=j; 
		
	}
	
	input(arr, n, "\n массив после сортировки: \n");
}
Теперь ваши, попытки. А то похоже что Вы код просто скопировали.

Последний раз редактировалось dr.Chas; 07.12.2011 в 09:52.
dr.Chas вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по сортировке массива! Chester18 Помощь студентам 1 30.10.2009 19:31
О сортировке массивов в C++ Frame1992 Помощь студентам 6 28.10.2009 16:50
Паскаль. Задача по сортировке igoreha Помощь студентам 8 07.04.2009 14:20
Ошибка в сортировке Veiron Общие вопросы Delphi 14 21.01.2008 21:35