IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> проблема с сортировкой, c++
Rocket
сообщение 1.03.2009 21:05
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Возникла проблема с сортировкой, суть которой заключается в следующем:
допустим, наш изначальный массив 3 7 4 1 8 3 3 5 9 1. Строится бинарное дерево, на следующий уровень идут
3 1 3 3 1, то есть соседние числа сравниваются, дальше идет наименьший элемент.
Следующие уровни: 1 3 1,
1 1
1
В конце остаётся 1, она отправляется в отсортированный массив (в данном случае на первое место), а из начального массива отбрасывается (заменяется на бесконечность).
Вобщем, в этом суть, преподаватель назвал его "турнирной" сортировкой, но это явно не "пирамидальная-турнирная-HeapSort" сортировка, преведённая на форуме.
Вот мой код:

#include <iostream>
#include<conio.h>
#include <windows.h>
#include <math.h>
using namespace std;

int xe; 
int temp[1000], buff[1000];

int stTwo(int size)
{
  int k=0;
  while (pow(2,k)<size)
   k+=1;
   return k;
}


void TurnirSort(int *a, long size, int st, int li)
{ 
    int cl = size;
    int S = li;
    for (int i=0; i<S; i++)
     buff[i]=a[i];
         
  while(cl != 1)
  {
           
  for (int i=0,j=0;i<cl; i+=2,j++)
  {
     if (buff[i]>buff[i+1])
        temp[j]=buff[i+1];
        else temp[j]=buff[i];
  }
  cl = li/2;
  li = cl;
  
  for (int i=0; i<cl; i++)
   buff[i]=temp[i];
   
  for (int i=0; i<cl; i++)
   if(buff[i] == 0) buff[i] = 1000; 
   
  
   }
     
    xe = temp[0];
   
    
    for (int i=0; i<size;i++) 
    if (a[i] == xe) 
    {
         a[i] = 1000;
         break;
    }
        
        
 
     }
     


int main()
{   
    srand(time(NULL));
    int ch,size,l, h, st, li;
    
    cout<<"Please, enter the size of massive to sort!"<<endl;   
    cin>>size;
    cout<<"Please, enter the down border!"<<endl;
    cin>>l;
    cout<<"Please, enter the up border!"<<endl;
    cin>>h;
    
    int a[size]; 
    int vec_sort[size];
     
     st = stTwo(size);
     li = (int)pow(2,st);
     
     
     for(int i=0;i<size;i++)
     {
     a[i]=l+rand()%(h-l); 
     }  
     for (int i=size; i<li;i++)
     {
      a[i] = 1000;   
         }
                      
     for(int i=0;i<size;i++)
     {
     cout<<a[i]<<" ";
     }
     cout << endl << endl;
     
     
     
     long time = GetTickCount();
     
     for(int i=0; i<size; i++)
     {
     TurnirSort(a,size,st,li);
     vec_sort[i] = xe;
     }
     time = GetTickCount()-time; 
     
     for(int i=0;i<size;i++)
     {
     cout<<vec_sort[i]<<" ";
     }
     cout << endl << endl;
     getch();
     cout<<"time = "<<time<<endl;
     getch();
     
}


Тестировал я её на масивах в 10 элементов, всё четко работало и работает, а вот, когда перешёл к практике(массив в 100 элементов), возникла ошибка - тупо выкидывает из программы... в чём проблема?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Rocket   проблема с сортировкой   1.03.2009 21:05
volvo   В вылете за пределы массива... Вот тут: // Чему з...   1.03.2009 21:17
Rocket   В вылете за пределы массива... Вот тут: [code=cp...   1.03.2009 22:06
volvo   Может и есть... По мне - так оно и не надо. Очень ...   1.03.2009 22:46
Rocket   Может и есть... По мне - так оно и не надо. Очень...   1.03.2009 23:14
volvo   С большой степенью вероятности - GCC, у меня тоже ...   2.03.2009 0:03
Rocket   очень может быть, что при быстром компьютере все t...   2.03.2009 1:02
Rocket   Добавил вывод массивов: начального, промежуточного...   16.03.2009 23:26
volvo   Чего ж непонятные? Все понятно... Что просил - то ...   17.03.2009 0:32
Rocket   Чего ж непонятные? Все понятно... Что просил - то...   17.03.2009 11:15
volvo   Ага... Ты массив buff инициализируешь некорректно....   17.03.2009 11:27
Rocket   Ага... Ты массив buff инициализируешь некорректно...   17.03.2009 23:03
volvo   Ты забыл инициализировать массив temp нулями, лучш...   17.03.2009 23:45
Rocket   Вот реализация двух других известных методов сорти...   23.03.2009 21:32
volvo   Размер = 3000, ничего не вылетело. Что я делаю не ...   23.03.2009 21:39
Rocket   Размер = 3000, ничего не вылетело. Что я делаю не...   23.03.2009 21:55
volvo   CodeGuard нашел проблему: void Q_Sort(int *a, lon...   23.03.2009 22:42
Rocket   CodeGuard нашел проблему:А как тогда это исправить...   23.03.2009 22:49
volvo   А подумать? void Q_Sort(int *a, long size) { long...   23.03.2009 23:09


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 20.07.2025 1:42
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"