Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [BCB->VBA] Сортировка массива методом Хоара


Автор: ImmS 10.1.2007, 18:10
Надо перевести программу из кода BCB в VBA, програмка сортирует массив методом Хоара, и должна работать в Excel. Раньше не сталкивался, поэтому понятия не имею как это сделать...если кто может помогите...заранее благодарен...
Вот код функции в BCB:
Код

   #include <math.h>
   #include <iostream.h>
   #include <fstream.h>
   #include <stdio.h>
   #include <conio.h>

void Sort(int L,int R,int A[])
{
 int X,Y,i,j;
 X=A[(L+R)/2];
 i=L;
 j=R;
 while (i<=j)
      {
       while (A[i]<X){i=i+1;}
       while (A[j]>X){j=j-1;}
       if (i<=j)
           {
            Y=A[i];A[i]=A[j];A[j]=Y;
            i=i+1; j=j-1;
           }
      }
  if (L<j) {Sort(L,j,A);}
  if (i<R) {Sort(i,R,A);}
}

Автор: Aloha 10.1.2007, 18:58
ImmS

Код
Sub s_Test()          'тестовая процедура
  Dim A(9) As Long    'объявляем массив из 10 элементов
  Dim i As Long       'объявляем вспомогательную переменную цикла
  Dim v_Str As String 'объявляем переменную - строку сообщения о результатах
  A(0) = 59           'заполняем массив
  A(1) = 26
  A(2) = 48
  A(3) = 92
  A(4) = 12
  A(5) = 61
  A(6) = 43
  A(7) = 35
  A(8) = 20
  A(9) = 73

  Sort 0, 9, A()      'сортируем массив
  
  For i = 0 To 9      'формируем строку сообщения о результатах сортировки
    v_Str = v_Str & CStr(A(i)) & Chr(13)
  Next i
  MsgBox v_Str        'выводим сообщение о результатах сортировки
End Sub
'/////////////////////////////////////////////////////////////////////////////////////
Sub Sort(L As Long, R As Long, A() As Long) 'процедура сортировки
  Dim X As Long, Y As Long, i As Long, j As Long
  X = A((L + R) / 2)
  i = L
  j = R
  Do While i <= j
    Do While A(i) < X
      i = i + 1
    Loop
    Do While A(j) > X
      j = j - 1
    Loop
    If i <= j Then
      Y = A(i): A(i) = A(j): A(j) = Y
      i = i + 1: j = j - 1
    End If
  Loop
  If L < j Then Sort L, j, A()
  If i < R Then Sort i, R, A()
End Sub

Автор: ImmS 11.1.2007, 06:09
Большое спасибо все работает отлично smile
Как подписался один из участников форума:

if (help == true) reputation++;  smile 
вот только посьов и мну маловато smile

Автор: Alexeis 11.1.2007, 14:17

M
Alexeis
Модератор: Название темы должно отражать ее суть!

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