Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 23.06.2011, 17:46   #1
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Сообщение 2 алгоритма сортировки массива

Еще раз здравствуйте, форумчане. Я хотел бы узнать, какой из алгоритмов сортировки быстрее. Сам я, к сожалению, еще работать со временем еще не научился, и поэтому не могу определить скорость выполнения операций. Интересует именно скорость выполнения функции sort.
#include <iostream>
using namespace std;

void sort(int arr[], int L);
void swap(int *p_1, int *p_2);

int main() {
	int i;
    int arr[5]={1, 100, 3, 2, 6};

	sort(arr, 5);
	for (i=0; i<5; i++) {cout << i << " = " << arr[i] << endl;}

    return 0;
}

void sort(int arr[], int L) {
	if (L<2) {return;}

	int i, k;
	int current_n=arr[0];

	for (i=1; i<L; i++) {
		if (arr[i]<current_n) {
			swap(&arr[i], &arr[i-1]);
			for (k=i-1; k>0; k--) {
				if (arr[k]<arr[k-1]) {
					swap(&arr[k], &arr[k-1]);
				} else {
					break;
				}
			}
		}
		current_n=arr[i];
	}
}

void swap(int *p_1, int *p_2) {
	int tmp=*p_1;
	*p_1=*p_2;
	*p_2=tmp;
}
#include <iostream>
usingnamespace std;

void sort(int n);

int main() {
	int a[10];
	int i;

	for (i=0; i<10; i++) {
		cout << "Enter array element #" << i << ": ";
		cin >> a[i];
	}

	sort(a, 10);
	cout << "Here are all the array elements, sorted:" << endl;
	for (i=0; i<10; i++) {
		cout << a[i] << " ";
	}

	return 0;
}

void sort(int a[], int n) {
	int i, j, low;
	for (i=0; i<n-1; i++) {
		low=i;
		for (j=i+1; j<n; j++) {
			if (a[j]<a[low]) {
				low=j;
			}
		}
		if (i!=low) {
			swap(&a[i], &a[low]);
		}
	}
}

void swap(int *p1, int *p2) {
	int temp=*p1;
	*p1=*p2;
	*p2=*temp;
}
Заранее благодарен.
(Offline)
 
Ответить с цитированием
Старый 23.06.2011, 20:17   #2
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений
(для 1,471 пользователей)
Ответ: 2 алгоритма сортировки массива

Первый исходник:
- 10000 объектов
- 650 milliseconds
Второй:
- В swap ругался на *p2=*temp; (error C2100: illegal indirection)
- Поставил swap от первого
- 10000 объектов
- 203 milliseconds
Как видишь, второй шустрее.
---
Насчет времени,
Инициализация:
#include <ctime>
Функция (аналог Millisecs() в Blitz3d):
clock();
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Hagrael (23.06.2011)
Старый 23.06.2011, 20:39   #3
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: 2 алгоритма сортировки массива

Большое спасибо!
Интересно, конечно, засчет чего второй вариант функции работает быстрее. Наверное, это из-за многочисленных вызовов функции swap.
(Offline)
 
Ответить с цитированием
Старый 23.06.2011, 20:43   #4
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: 2 алгоритма сортировки массива

Выяснил, что I-ый алгоритм гораздо стабильнее, а быстрота выполнения второго зависит от того, как в нем расставлены цифры. По сути оба из них схожи, но быстрота II-го и в правду достигается засчет малого количества вызовов функции swap.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 09:57.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com