Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблемы с быстрой сортировкой


Автор: 6atoh 17.9.2006, 18:24
Взял алгоритм быстрой сортировки с http://algolist.manual.ru/sort/quick_sort.php
Вот он собственно:
Код

template<class T>
void quickSortR(T* a, long N) {
// На входе - массив a[], a[N] - его последний элемент.

  long i = 0, j = N; // поставить указатели на исходные места
  T temp, p;

  p = a[ N>>1 ];// центральный элемент

  // процедура разделения
  do {
    while ( a[i] < p ) i++;
    while ( a[j] > p ) j--;

    if (i <= j) {
      temp = a[i]; a[i] = a[j]; a[j] = temp;
      i++; j--;
    }
  } while ( i<=j );


  // рекурсивные вызовы, если есть, что сортировать 
  if ( j > 0 ) quickSortR(a, j);
  if ( N > i ) quickSortR(a+i, N-i);
}

Так вот меня смущает строка:
if( N > i ) quickSortR(a+i, N-i);
что значит a+i, если a в моем случае - массив byte[]???

Автор: CaptainFlint 17.9.2006, 18:32
Цитата(6atoh @  17.9.2006,  19:24 Найти цитируемый пост)
что значит a+i, если a в моем случае - массив byte[]???

Имя массива является указателем на его начало. Т.е. литерал a является переменной, содержащей адрес ячейки a[0]. Соответственно, прибавляя к указателю число i, ты смещаешь этот указатель на i элементов, т.е. a+i будет являться указателем на ячейку a[i]

Автор: Kuvaldis 17.9.2006, 18:35
6atoh, 
В С/С++ имя массива - это указатель на первый элемент(его адрес)
Если мы к указателю прибавляем число i, то компилятор РЕАЛЬНО указывает на i-тый элемент массива независимо от его типа. Происходит это так: i * sizeof(тип_элементов_массива)

Т.е. a + i - это указатель (см. выше - имя массива)


P.S. 
CaptainFlint - редиска, опередил меня  smile 

Автор: maxim1000 17.9.2006, 21:28
всё-таки, вопрос больше по C/C++, чем по алгоритму
так что туда и переношу...

Автор: 6atoh 18.9.2006, 02:02
всем спасибо....видимо придется создавать похожую тему в .NET, т.к. именно там у меня возникла проблема

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)