Вопрос № 116827:
Здравствуйте Поздравляю с новым годом!!!!!
Помогите разобраться с алгоритмоми сортировки и поиска в массивах
Сортировка выбором
Сортировка мет. пузырька
Сортировка включением
Быстрая сортировка
Линейный по...Вопрос № 116832: В MS Visual C++ 2005 Express Edition не могу скомпилировать программу
Ошибка:
Cannot open include file: 'windows.h'
Установил Microsoft Platform SDK for Windows Server 2003 R2, но всеравно ошибка не проходит. Пробовал скопировать фай...Вопрос № 116876: Здарвствуйте, товарищи эксперты, нужна помощь! Помогите написать программу на нахождения максимального по значению элемента списка на С++ с помощью динамических структур данных...Вопрос № 116896: Здравствуйте, уважаемые эксперты! Очень надеюсь на вашу помощь. Необходимо решить вот такую
задачу по "Си" (сам я пока ещё дуб - а времени уже нету...):
"Ввести строки, в которых имеются круглые, фигурные и квадратные скобки. Прове...
Вопрос № 116.827
Здравствуйте Поздравляю с новым годом!!!!!
Помогите разобраться с алгоритмоми сортировки и поиска в массивах
Сортировка выбором
Сортировка мет. пузырька
Сортировка включением
Быстрая сортировка
Линейный поиск элемента
Двоичный поиск элемента
С уважением Vidok.
Отправлен: 04.01.2008, 07:33
Вопрос задал: Vidok (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Maksim Trofimov
Здравствуйте, Vidok!
Ого-го...сколько навалило в новый год :) :
+ Сортировка включением
+ Быстрая сортировка
Сначало код (на С):
------------------------------
#include <stdio.h>
#define compGT(a,b) (a > b)
typedef char T; // Тип элемента для сортировки
typedef char tblIndex; // тоже самое сдесь подставить...
// Сортировка включением
void insertSort(T *a, tblIndex lb, tblIndex ub) {
T t;
tblIndex i, j;
i = lb+1;
j = ub;
while (1) {
while (i < j && compGT(pivot, a[i])) i++;
while (j >= i && compGT(a[j], pivot)) j--;
if (i >= j) break;
t = a[i];
a[i] = a[j];
a[j] = t;
j--; i++;
}
// массив длиной больше чем 12 элементов - будет сортировка включением
quickSort(arr, 0, arr_len-1);
// ну и выводим поэлементно...
puts("Sorting by insertion");
for(i = 0; i < arr_len; i++)
printf("%c ", arr[i]);
// сделаем так, чтобы сработала быстрая сортировка
strcpy(arr, "dfbcaa,3e42");
arr_len = strlen(arr);
quickSort(arr, 0, arr_len-1);
puts("
Sorting by quick sort");
for(i = 0; i < arr_len; i++)
printf("%c ", arr[i]);
return 0;
}
------------------------------
Значит так. Алгоритм быстрой сортировки разбивает сортируемый массив на разделы, затем рекурсивно сортирует каждый раздел.
В функции partition(arr, i, j) один из элементов массива выбирается в качестве центрального. Ключи, меньшие центрального следует расположить слева от него, те, которые больше, – справа. Индексы начинают изменяться с концов массива. Индекс i начинается слева и используется для выбора элементов, которые больше центрального, индекс j начинается справа и используется для выбора элементов, которые меньше центрального. Эти элементы меняются местами. Короче:
1) 4 2 3 5 1 //исходный массив элементов:
^
2) 1 2 3 5 4 // поменяли местами концы массива
3) Процедура quickSort рекурсивно сортирует два подмассива {1 2} и {5 4}, в результате получается массив:
1 2 3 4 5
В качестве центрального в функции partition() выбирается элемент, расположенный в середине.
Для коротких массивов вызывается функция insertSort() - cортировка включением. Из-за рекурсии и других “накладных расходов” быстрая сортировка оказывается не столь уж быстрая для коротких массивов. Поэтому, если в массиве 12 и меньше элементов, вызывается сортировка включением.
Чтобы было понятней, в приложении ссылка на справочник, из которого я, кстати, и черпал :)
Приложение:
Ответ отправил: Maksim Trofimov (статус: 3-ий класс)
Ответ отправлен: 04.01.2008, 10:40
Отвечает: Solar
Здравствуйте, Vidok!
Вообще-то, неплохо иногда юзать гугл, но, тем не менее получайте (код в приложении).
По нижеприведенной ссылке вы найдете практически исчерпывающую информацию по алгоритмам сортировки.
На этом сайте есть отдельные разделы освященные сортировке и поиску. Также советую почитать Д.Кнута "Искусство программирования" 3-ий том. Название его говорит само за себя - "Сортировка и поиск". Материал изложенный в ней, хотя и непрост
для восприятия, но является лучшим пособием в этой области.
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 05.01.2008, 04:21
Вопрос № 116.832
В MS Visual C++ 2005 Express Edition не могу скомпилировать программу
Ошибка:
Cannot open include file: 'windows.h'
Установил Microsoft Platform SDK for Windows Server 2003 R2, но всеравно ошибка не проходит. Пробовал скопировать файл windows.h, но появляется ошибка: Cannot open include file: 'windef.h'
Отвечает: Maksim Trofimov
Здравствуйте, Иванов Максим!
Не нужно компилировать...
Что можно попробывать сделать?:
1) Не подключать его. Может быть его подключит другой заголовочный файл, и он знает где windows.h расположен;
2) Найти, в какой директории он расположен (может быть он не в директории include VC) и прописать полный путь к нему, например #include "C:Program FilesMicrosoft Visual Studio 8VCPlatformSDKIncludewindows.h";
3) А регистр соблюден? Может быть Windows.h, а не windows.h ...
Ответ отправил: Maksim Trofimov (статус: 3-ий класс)
Ответ отправлен: 04.01.2008, 09:54
Отвечает: Mitya86
Здравствуйте, Иванов Максим!
А у тебя, случаем, не в кавычках ли windows.h находится? Если да, замени их на треугольные скобки(см.пример). Надеюсь помог.
Удачи!
Приложение:
Ответ отправил: Mitya86 (статус: 3-ий класс)
Ответ отправлен: 04.01.2008, 10:39
Отвечает: kool
Здравствуйте, Иванов Максим!
Поищите где у вас находится файлы windows.h и
другие *.h и пропишите путь к этой папке в настройках среды
Неплохо бы еще глянуть текст проги где используется windows.h
Удачи!
--------- I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 04.01.2008, 12:14
Отвечает: mega
Здравствуйте, Иванов Максим!
После установки SDK, найдите его группу через меню "Пуск-> Программы...", среди всего прочего, там должен быть ярлык на bat-файл, с названием "Set Envirounment" или "Set Envirounment Variables" (точно не помню), выполните его, перезапустите среду, или ребутните комп.
Проблема в том, что в настройках среды после установки SDK не указаны пути поиска стандартных хидеров, библиотек, исходников и т.п.
Этот батник как раз и добавляет пути до всех нужных подпапок SDK в VS.
То же самое можно сделать и вручную, перейти в меню Tools->Options->Projects->VC++Directories и добавить к каждой группе списка "Show directories for" соответствующий путь из SDK. Но такой способ менее надежен, поскольку можно что-то да пропустить.
Ответ отправил: mega (статус: 3-ий класс)
Ответ отправлен: 04.01.2008, 13:20 Оценка за ответ: 5 Комментарий оценки: Все помогло, спасибо!
Вопрос № 116.876
Здарвствуйте, товарищи эксперты, нужна помощь! Помогите написать программу на нахождения максимального по значению элемента списка на С++ с помощью динамических структур данных
Отвечает: Maksim Trofimov
Здравствуйте, Мингараев Дмитрий!
Вот пожайлуста... Динамическая структура - односвязный список. Элементами списка являются данные типа char (чтобы сделать шаблон, не придется много исправлять). Максимальный элемент определяется методом max().
Ответ отправил: Maksim Trofimov (статус: 3-ий класс)
Ответ отправлен: 04.01.2008, 16:07
Отвечает: Ross
Здравствуйте, Мингараев Дмитрий!
Решение в приложении к ответу. В отличие от предыдущего ответа здесь использована традиционная структура списка (head/tail) и шаблоны.
Приложение:
--------- Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 04.01.2008, 16:22
Вопрос № 116.896
Здравствуйте, уважаемые эксперты! Очень надеюсь на вашу помощь. Необходимо решить вот такую задачу по "Си" (сам я пока ещё дуб - а времени уже нету...):
"Ввести строки, в которых имеются круглые, фигурные и квадратные скобки. Проверить, правильно ли они расставлены. Результат вывести на экран. Стандартных функций работы со строками не использовать."
Если можно - алгоритм решения, комментарии, ссылки и всё, что может помочь мне в данной ситуации...
P.S. Также может найдётся такой добрый человек, который скинет готовый файл (...или что-нить похожее...) именно для Си/Си ++... А лучше всего - на Turbo Си ++... =)))
На других языках не пишите... Всё равно нету уже времени переделывать под себя...
P.P.S. Заранее благодарен всем взявшимся помочь и просто всем знающим... Очень нуждаюсь в вашей помощи... =(
Отправлен: 04.01.2008, 17:35
Вопрос задал: Tarik-fly (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: X-men
Здравствуйте, Tarik-fly!
Вот как мне представляется алгоритм программы:
1. Посчитать количество открытых и закрытых скобок (для каждого типа ( "()", "[]", "{}" ) скобок)
2. Если кол-во открытых скобок равняется количеству закрытых, то:
2.1. вызов рекурсивной функции для проверки всего выражения:
2.1.1. поиск первой открывающейся скобки. Если найдена открывающаяся скобка, то запомнить её тип и далее искать закрывающуюся скобку (разумеется этого же типа).
2.1.2. Если закрывающая скобка не была найдена, то выход из всех рекурсий и вывод ошибки.
2.1.3. Иначе (если она была найдена), то вызываем рекурсию (параметром будет подстрока между открытой и закрытой скобкой).
3. иначе (если даже количество не совпадает [см.п.2.] ), то вывод ошибки.
В приложении описана часть этого алгоритма. Осталось лишь функцию дописать.
Приложение:
Ответ отправил: X-men (статус: 2-ой класс)
Ответ отправлен: 05.01.2008, 00:50
Отвечает: Maksim Trofimov
Здравствуйте, Tarik-fly!