Модераторы: Alexeis
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка 
:(
    Опции темы
KAPJICOH
Дата 7.6.2006, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 18.4.2006

Репутация: нет
Всего: нет



Существует массив с отсортированными по имени элементами. При добавлении нового элемента, ищу его место(уже отсортированное) банальным сравнением, что занимает очень много времени. Может кто подскажет как ускорить этот процесс или может использовать вовсе другой алгоритм? Если надо могу приложить код функции поиска позиции. И еще программирую для WindowsMobile. 
PM MAIL   Вверх
skyboy
Дата 7.6.2006, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



KAPJICOH, бинарный поиск? У тебя ведь линейный список с данными?

Добавлено @ 01:07 
Если не в курсе, вкратце обрисую алгоритм. У тебя есть отсортированный список значений и значений, которое необходимо вставить. Ты можешь определить, где в отсортированном списке находится место твоего элемента: до какого-то элемента или после, правильно? Ведь ты же знаешь, как отсортированы элементы... Так вот, берёшь элемент посередине массива и смотришь: "твой" элемент должен быть до этого "среднего" элемента или после. Если до - берёшь первую половину массива и снова смотришь "средний" в ней элемент. Если после - берёшь вторую половину массива. В худшем случае необходимо выполнить round(log2n) сравнений. Но это - в худшем случае  smile  
PM MAIL   Вверх
KAPJICOH
Дата 7.6.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 18.4.2006

Репутация: нет
Всего: нет



skyboy, в списке существует 2 вида элементов, которые сортируются индивидуально.

Получается для бинарного поиска мне надо создать переменную, хранящую количество элементов одного из вида и вычислять середину так: (all-size)/2+all, где all - размер списка, size - число элементов одного из вида. Правильно? 
PM MAIL   Вверх
skyboy
Дата 7.6.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



KAPJICOH, ну, видимо. Откуда ж я могу знать, как эти два вида у тебя расположены - вперемешку или сначала одного типа, а затем уже - второго? Но если мухи - отдельно, котлеты - отдельно, тогда да - надо работать только с той частью, которая тебе нужна. 
PM MAIL   Вверх
Snowy
Дата 7.6.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 2
Всего: 484



Модератор: не забываем указывать компилятор 
PM MAIL   Вверх
KAPJICOH
Дата 7.6.2006, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 18.4.2006

Репутация: нет
Всего: нет



skyboy, спасиба за совет. 
PM MAIL   Вверх
skyboy
Дата 7.6.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



KAPJICOH, а ведь Snowy прав smile Представь ситуацию: ты ищешь, делаешь, исправляешь ошибки, а потом оказывается, что нужный тебе алгоритм реализован в стандартных библиотеках компилятора, как qsort функция в С. Не обидно будет? smile 
PM MAIL   Вверх
KAPJICOH
Дата 7.6.2006, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 18.4.2006

Репутация: нет
Всего: нет



skyboy, ничего, иногда полезно все самому написать.

Переписал я код для сортровки по этому алгоритму и у меня возникла новая проблема. Элементы у меня хранятся в TreeView, а для получения i элемента надо пройти все предыдущие (другого способа я не знаю). В результате этот процесс стал занимать еще больше времени. Можно ли получить i в TreeView без прохода предыдущих?

Компилятор eVC++ 4.0 
PM MAIL   Вверх
Snowy
Дата 7.6.2006, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 2
Всего: 484



Построить список прямых указателей на ветки. И искать по нему.
А вообще зависит от критериев. Почему тебе нужна именно ветка i? Как ты это определяешь? 
PM MAIL   Вверх
KAPJICOH
Дата 8.6.2006, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 18.4.2006

Репутация: нет
Всего: нет



Snowy, в алгоритме бинарного поиска берется средней элемент списка - он и есть i.  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование мобильных устройств"
Alexeis

Раздел посвящен программированию мобильных устройств.

Все остальные вопросы по мобильным устройствам (КПК, смартфоны, телефоны, фотоаппараты и т.п),
не имеющие отношения к программированию, просьба размещать в разделе КПК, смартфоны, мобильники

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Платформы Windows Mobile и Windows Embedded | Следующая тема »


 




[ Время генерации скрипта: 0.0726 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.