Показать полную графическую версию : Вопрос на кругозор
Hardcore
29-09-2010, 16:19
Можете наглядно объеснить как можно написать merge sort алгаритом с коментами.
Хотел сам по гуглить но нечего не опнятно.
Хотел сам по гуглить »
Что помешало?
Сортировка_слиянием (http://ru.wikipedia.org/wiki/Сортировка_слиянием)
Hardcore
29-09-2010, 21:48
Там были примеры, но без коментов. Я ничего не понял. Я хотел по просить кого нить чтоб он написал код с понятными коментами.
LxA 85, можешь написать и всё подробно расписать?
Hardcore, ты по ссылкам в статье в Википедии ходил? Там в картинках с примерами. Псевдокод и т.д.
Или тебе не понятен смысл и суть алгоритма?
Как бы сказать... Что именно ты хочешь узнать? Понимаешь, твой вопрос сейчас звучит в очень широком смысле. И поэтому, как и каждого не определившегося, тебя посылают изучать литературу. Когда у тебя появится базис, ты уже сможешь задать более конкретный вопрос. И уже будет видно, что человек что-то искал, копал, старался. Т.е. уже можно с ним о чем то поговорить.
Поэтому без обид, но пока тебе придется дальше изучать примеры в википедии. С листком бумаги, с собственными примерами входных данных. Пройти алгоритм "по шагам" в ручную.
P.S. Сразу скажу, никаких кодов С++ я писать не буду. Псевдокод в лучшем случае.
Hardcore
29-09-2010, 23:15
Я по капалься и нашел самый для меня понятный код с коментами. Но она не компилирвуется.
Почему?
#include <iostream>
using namespace std;
template<class T> void MergeSort(T *const A, int const n)
{ //Отсортировать массив A, содержащий n элементов
if( n < 2 ) return; //Сортировка не нужна
if( n == 2 ) //Два элемента проще поменять местами,
{ // если нужно, чем делать слияние
if( A[0] > A[1] ) { T const t(A[0]); A[0]=A[1]; A[1]=t; }
return;
}
MergeSort(A , n/2 ); //Сортируем первую половину
MergeSort(A+n/2, n-n/2); //Сортируем вторую половину
T *const B( new T[n] ); //Сюда запишем результат слияния
Merge(A,n/2, A+n/2,n-n/2, B); //Слияние половин
//Копирование результата слияния в исходный массив:
for(int i(0); i<n; ++i) A[i]=B[i];
delete[n] B; //Удаляем временный буфер
}
а компилятор что говорит?
Hardcore
30-09-2010, 08:03
Выводит Error(
где блок main ?
где реализация функций merge? (или она стандартная, встроенная)
Выводит Error( »
Какой именно Error?
Hardcore
30-09-2010, 09:06
Error 2 error LNK1120: 1 unresolved externals C:\Users\Sungat\documents\visual studio 2010\Projects\лимит\Debug\merge.exe
Error 1 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup C:\Users\Sungat\documents\visual studio 2010\Projects\лимит\лимит\MSVCRTD.lib(crtexe.obj)
El Scorpio
01-10-2010, 09:34
Error 2 error LNK1120: »
Поскольку указанная функция есть шаблон, то она сама по себе не комплируется.
Вместо этого для каждого типа данных, указываемых параметром T, создаётся свой код.
Для того, чтобы компилятор мог создать этот код, текст шаблона должен быть подключен к тексту модуля. А поскольку подключаются обычно только .h файлы, значит текст функции должен быть реализован не в .cpp, а именно в .h
Hardcore
01-10-2010, 14:00
El Scorpio, можешь помочь с проблемой?
Попался ресурс по теме: Сортирующие алгоритмы (http://www.sorting-algorithms.com/)
El Scorpio
04-10-2010, 04:29
Чем именно помочь? Погуглить за вас?
По ошибке 1120 я уже сказал - перенести текст её функции из файла cpp в файл h
А*по ошибке 2019 сразу же нашёл это - http://www.cyberforum.ru/visual-cpp/thread38697.html
я рад за тебя! пропиши в свойствах проекта точку входа - функцию main
По моему такая ошибка возникает когда пытаешься запустить консольное приложение в проекте другого типа, т.е. Win32 Project, а не Win32 Console Project
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.