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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Методы сортировки одномерного массива? 
:(
    Опции темы
Wowa
  Дата 17.2.2005, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Какие методы сортировки одномерного массива вы знаете?

Желательно приводить метод сортировки на англ. яз и описание.
PM WWW   Вверх
Akina
Дата 17.2.2005, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



algolist.manual.ru
Давно пора бы в Избранное занесть...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Sardar
Дата 17.2.2005, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Вообще стоит держать массив уже отсортированным. Т.е. не массив, а дерево(любое). По моему в обычной ситуации быстрее "быстрой сортировки" ничего нет, но если нужны какие то еще результаты(побочное дерево и т.п.), то применяем что то другое.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
maxim1000
Дата 17.2.2005, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

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



Цитата
Вообще стоит держать массив уже отсортированным. Т.е. не массив, а дерево(любое). По моему в обычной ситуации быстрее "быстрой сортировки" ничего нет

не совсем smile
есть еще сортировка слиянием: она гарантированно дает O(n*log n), тогда как быстрая иногда может дать O(n*n)
а для "почти отсортированных" массивов вообще, насколько мне не изменяет память, неплохо подходит "пузырек" smile
так что универсальных методов еще не придумали...


--------------------
qqq
PM WWW   Вверх
Akina
Дата 17.2.2005, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Sardar
не каждый массив можно держать сортированным - может ты его получаешь весь сразу, а не накапливаешь...
не каждый массив вообще разместится в памяти - тогда о быстрой сортировке можно просто забыть...
впрочем кому я это рассказываю...



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
pablo
Дата 17.2.2005, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

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



Для почти отсортированных масивов лучше сортировки шелла не найти, производительность О(n^(3/2)).
Он медленнее быстрой сортировки, но быстрее пузерька.


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
Akina
Дата 17.2.2005, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



pablo
А если это массив из 5 элементов? smile



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
pablo
Дата 17.2.2005, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

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



Ну и что ?



--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
Wowa
Дата 17.2.2005, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



тут: http://liebknecht-gymnasium.bei.t-online.d...arstellung.html
можно посмотреть разные варианты сортировки в действии
PM WWW   Вверх
Doc_d0s
Дата 17.2.2005, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот тебе сырец простого слияния ман найдешь на алголисте:
Код

#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>

const n=11;
void slei(int a[],const int n1);
FILE *f1;

void main()
{

int i,a[2*n];

f1=fopen("C:\\f.dat","r");
 
printf("Do sortirovki i...");
printf("\n\n\t\t");
for (i=0;i<n;i++)
 {
  fscanf(f1," %d",&a[i]);
  printf("  %d",a[i]);
 }
printf("\n");

fclose(f1);

slei (a,n);

printf ("\nposle\n");
printf("\n\t\t");
for (i=0;i<n;i++)
   {
 printf("  %d",a[i]);
   }
printf("\n\t\t");
getch();
}

void slei(int a[],const int n1)
{
int i,j,k,l,t;
int h,m,p,q,r;
int up=1;


p=1;

do{
m=n1;
h=1;
if(up)
 {
  i=0;
  j=n-1;
  k=n1;
  l=2*n1-1;
 }
 else
 {
  k=0;
  l=n1-1;
  i=n1;
  j=2*n1-1;
 }
   do
     {
  if(m>=p)
   q=p;
  else
   q=m;
   m=m-q;
 
  if(m>=p)
   r=p;
  else
   r=m;
 
  m=m-r;
 
 while((q!=0) && (r!=0))
 {
  if(a[i]<a[j])
  {
   a[k]=a[i];
   k=k+h;
   i++;
   q--;
  }
  else
  {
   a[k]=a[j];
   k=k+h;
   j--;
   r--;
  }
 }
 while(r!=0)
 {
  a[k]=a[j];
  k=k+h;
  j--;
  r--;
 }
 while(q!=0)
 {
  a[k]=a[i];
  k=k+h;
  i++;
  q--;
 }
 h=-h;
 t=k;
 k=l;
 l=t;
  }
       while(m!=0);
         up=!up;
   p=p*2;
}
  while(p<=n-1);
     
  if(!up)
      for(i=0;i<n;i++)
     
    a[i]=a[i+n];

}




--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
Sardar
Дата 17.2.2005, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Цитата(maxim1000 @ 17.2.2005, 10:53)
а для "почти отсортированных" массивов вообще, насколько мне не изменяет память, неплохо подходит "пузырек"

Нет, для малеьнких и почти отсортированных массивов лучше всего "Сортировка вставками" работает. Обычно в ральном коде если менее 7 элементов осталось, быстрая сортировка на сортировку вставками переключается.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Wowa
Дата 17.2.2005, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(Sardar @ 17.2.2005, 19:04)
в ральном коде если менее 7 элементов осталось, быстрая сортировка на сортировку вставками переключается.

переключается автоматом что-ли*
Добавлено @ 22:44
Цитата(Sardar @ 17.2.2005, 19:04)
в ральном коде если менее 7 элементов осталось, быстрая сортировка на сортировку вставками переключается.

переключается автоматом что-ли?
PM WWW   Вверх
Sardar
Дата 17.2.2005, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Угу, если пишем рекурсивно(что проще но и опаснее smile ) , то в начале вызова функции:
Код
если((индекс1-индекс2+1)<7) то сортировка_вставками(массив, индекс1,(индекс2-индекс1+1));

Сама сортировка похожа на пузырёк smile
Пример на JS(ибо быстро smile )
Код
function insertionSort(target, offset, length) {
  var i,j,temp,temp2;
  for(i=offset+1;i<offset+length;i++)
     for(j=i; j>offset;j--) {
        if(target[j]<target[j-1])  {
           var temp=target[j];
           target[j]=target[j-1];
           target[j-1]=temp;
        } else break;
     }
  return true;
}



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Гость_Артём
Дата 22.2.2005, 14:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Люди здрасте!
В связи с тем что я начал изучать недавно c++ у меня возникли некоторые проблемы.
Мне очень нужен алгоритм или программы поиска ОДНОГО СЛОВА ИЗ ВСЕГО ТЕКСТА, но не с помощью FindDialog а посредством чего нибудь другого, т.е. после запуска программы она должна "брать" из RichEdit'а текст (весь который там находится) и проверять совпадения слов со словами находящимися в БД.
Например, в поле RichEdit вводишь:

{
...
вверх 10
влево 15
вниз 5
...
}

и программа должна испонить команду - передвинуть, например, Shape вверх на 10 пикселей, влево на 15 и вниз на 5.

Помогите пожалуйста!!!!
Заранее благодарен.
  Вверх
chaos
Дата 22.2.2005, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



можеш воспользоваться стандартной функцией qsort или STL'евским sort
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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