Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Помогите сортировать массив в VB пожаалста. Добавлено: 16.03.10 00:14  

Автор вопроса:  Bu
Не работает чет нифига
VB:
3)Упорядочить массив А по возрастанию, используя след алгоритм сортировки
а) сортировка выбором: отыскивается мах элемент и переносится в конец массива и т.д.
б) сортировка обменом (метод пузырька) : последовательно сравниваются пары соседних элементов А и А и по условию они переставляются и т.д.
в) сортировка вставками: пусть первые элементы массива упорядочены, берется к+1 элемент и размещается среди первых
  
Вот что сделала я:
Dim bytA(1 To 100), bytMax, bytI, bytJ, bytK, bytR, bytN As Byte
Private Sub Command1_Click()
Randomize
For bytI = 1 To 10
bytA(bytI) = Int(Rnd * 100)
TxtDim.Text = TxtDim.Text + Str(bytA(bytI))
Next bytI
End Sub

Private Sub MaxElement(bytI, bytN As Byte)
bytMax = bytA(bytI)
bytN = bytI
For bytJ = bytI + 1 To 10
If bytA(bytJ) < bytMax Then bytMax = bytA(bytJ): bytN = bytJ
Next bytJ
End Sub



Private Sub Command2_Click()
txtSort.Text = ""
For bytI = 1 To 10

Call MaxElement(bytI, bytN)
bytR = bytA(bytI)
bytA(bytI) = bytA(bytN)
bytA(bytN) = bytR
Print " bytMax; bytN
For bytK = 1 To 10
txtSort.Text = txtSort.Text + Str(bytA(bytK))
Next bytK
Next bytI
End Sub


а вот последние два пункта никак не получаются, я не пойму как надо сделать
заранее благодарствую

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #1
Добавлено: 16.03.10 00:35
метод пузырька выглядит примерно так.

  1. ' Массив
  2. dim AR(1 to 10)
  3.  
  4. ' временная переменная
  5. dim tmp
  6.  
  7. dim n, m
  8.  
  9. for n=1 to 10
  10.   for m=1 to 10
  11.     if m<>n then
  12.       if AR(m)>AR(n) then ' Чтобы не сравнивал сам себя
  13.         ' Меняем местами
  14.         tmp=AR(n)
  15.         AR(n)=AR(m)
  16.         AR(m)=tmp
  17.       end if
  18.     end if
  19.   next
  20. next


пусть первые элементы массива упорядочены
Какие первые и сколько?

Ответить

Номер ответа: 2
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #2
Добавлено: 16.03.10 00:36
вообще вот, выбирай!
  1. Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal cbSize As Long)
  2.  
  3.  
  4. 'Метод Шелла
  5. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  6. 'Процедура для сортировки массива методом Шелла
  7. '
  8. 'Входные параметры:
  9. '    Arr -   сортируемый массив.
  10. '            Нумерация элементов от 0 до N-1
  11. '    N   -   размер массива
  12. '
  13. 'Выходные параметры:
  14. '    Arr -   массив, упорядоченный по возрастанию.
  15. '            Нумерация элементов от 0 до N-1
  16. '
  17. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  18. Public Sub ShellSort(ByRef Arr() As Double, ByVal N As Long)
  19.     Dim C As Boolean
  20.     Dim G As Long
  21.     Dim I As Long
  22.     Dim J As Long
  23.     Dim Tmp As Double
  24.  
  25.     N = N - 1#
  26.     G = (N + 1#) \ 2#
  27.     Do
  28.         I = G
  29.         Do
  30.             J = I - G
  31.             C = True
  32.             Do
  33.                 If Arr(J) <= Arr(J + G) Then
  34.                     C = False
  35.                 Else
  36.                     Tmp = Arr(J)
  37.                     Arr(J) = Arr(J + G)
  38.                     Arr(J + G) = Tmp
  39.                 End If
  40.                 J = J - 1#
  41.             Loop Until Not (J >= 0# And C)
  42.             I = I + 1#
  43.         Loop Until Not I <= N
  44.         G = G \ 2#
  45.     Loop Until Not G > 0#
  46. End Sub
  47.  
  48.  
  49.  
  50.  
  51.  
  52. 'Метод Уильяма Флойда (бинарных деревьев)
  53. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  54. 'Процедура для упорядочивания массива пирамидальной сортировкой
  55. '
  56. 'Входные параметры:
  57. '    Arr -   сортируемый массив.
  58. '            Нумерация элементов от 0 до N-1
  59. '    N   -   размер массива
  60. '
  61. 'Выходные параметры:
  62. '    Arr -   массив, упорядоченный по возрастанию.
  63. '            Нумерация элементов от 0 до N-1
  64. '
  65. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  66. Public Sub HeapSort(ByRef Arr() As Double, ByVal N As Long)
  67.     Dim I As Long
  68.     Dim J As Long
  69.     Dim K As Long
  70.     Dim T As Long
  71.     Dim Tmp As Double
  72.  
  73.     If N = 1# Then
  74.         Exit Sub
  75.     End If
  76.     I = 2#
  77.     Do
  78.         T = I
  79.         Do While T <> 1#
  80.             K = T \ 2#
  81.             If Arr(K - 1#) >= Arr(T - 1#) Then
  82.                 T = 1#
  83.             Else
  84.                 Tmp = Arr(K - 1#)
  85.                 Arr(K - 1#) = Arr(T - 1#)
  86.                 Arr(T - 1#) = Tmp
  87.                 T = K
  88.             End If
  89.         Loop
  90.         I = I + 1#
  91.     Loop Until Not I <= N
  92.     I = N - 1#
  93.     Do
  94.         Tmp = Arr(I)
  95.         Arr(I) = Arr(0#)
  96.         Arr(0#) = Tmp
  97.         T = 1#
  98.         Do While T <> 0#
  99.             K = 2# * T
  100.             If K > I Then
  101.                 T = 0#
  102.             Else
  103.                 If K < I Then
  104.                     If Arr(K) > Arr(K - 1#) Then
  105.                         K = K + 1#
  106.                     End If
  107.                 End If
  108.                 If Arr(T - 1#) >= Arr(K - 1#) Then
  109.                     T = 0#
  110.                 Else
  111.                     Tmp = Arr(K - 1#)
  112.                     Arr(K - 1#) = Arr(T - 1#)
  113.                     Arr(T - 1#) = Tmp
  114.                     T = K
  115.                 End If
  116.             End If
  117.         Loop
  118.         I = I - 1#
  119.     Loop Until Not I >= 1#
  120. End Sub
  121.  
  122.  
  123.  
  124.  
  125.  
  126. 'Метод слияний
  127. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  128. 'Процедура для сортировки массива методом фон Неймана (слияний)
  129. '
  130. 'Входные параметры:
  131. '    Arr -   сортируемый массив.
  132. '            Нумерация элементов от 0 до N-1
  133. '    N   -   размер массива
  134. '
  135. 'Выходные параметры:
  136. '    Arr -   массив, упорядоченный по возрастанию.
  137. '            Нумерация элементов от 0 до N-1
  138. '
  139. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  140. Public Sub MergeSort(ByRef Arr() As Double, ByVal N As Long)
  141.     Dim C As Boolean
  142.     Dim I As Long
  143.     Dim I1 As Long
  144.     Dim I2 As Long
  145.     Dim N1 As Long
  146.     Dim N2 As Long
  147.     Dim J As Long
  148.     Dim K As Long
  149.     Dim Tmp As Double
  150.     Dim BArr() As Double
  151.     Dim MergeLen As Long
  152.  
  153.     ReDim BArr(0# To N - 1#)
  154.     MergeLen = 1#
  155.     C = True
  156.     Do While MergeLen < N
  157.         If C Then
  158.             I = 0#
  159.             Do While I + MergeLen <= N
  160.                 I1 = I + 1#
  161.                 I2 = I + MergeLen + 1#
  162.                 N1 = I + MergeLen
  163.                 N2 = I + 2# * MergeLen
  164.                 If N2 > N Then
  165.                     N2 = N
  166.                 End If
  167.                 Do While I1 <= N1 Or I2 <= N2
  168.                     If I1 > N1 Then
  169.                         Do While I2 <= N2
  170.                             I = I + 1#
  171.                             BArr(I - 1#) = Arr(I2 - 1#)
  172.                             I2 = I2 + 1#
  173.                         Loop
  174.                     Else
  175.                         If I2 > N2 Then
  176.                             Do While I1 <= N1
  177.                                 I = I + 1#
  178.                                 BArr(I - 1#) = Arr(I1 - 1#)
  179.                                 I1 = I1 + 1#
  180.                             Loop
  181.                         Else
  182.                             If Arr(I1 - 1#) > Arr(I2 - 1#) Then
  183.                                 I = I + 1#
  184.                                 BArr(I - 1#) = Arr(I2 - 1#)
  185.                                 I2 = I2 + 1#
  186.                             Else
  187.                                 I = I + 1#
  188.                                 BArr(I - 1#) = Arr(I1 - 1#)
  189.                                 I1 = I1 + 1#
  190.                             End If
  191.                         End If
  192.                     End If
  193.                 Loop
  194.             Loop
  195.             I = I + 1#
  196.             Do While I <= N
  197.                 BArr(I - 1#) = Arr(I - 1#)
  198.                 I = I + 1#
  199.             Loop
  200.         Else
  201.             I = 0#
  202.             Do While I + MergeLen <= N
  203.                 I1 = I + 1#
  204.                 I2 = I + MergeLen + 1#
  205.                 N1 = I + MergeLen
  206.                 N2 = I + 2# * MergeLen
  207.                 If N2 > N Then
  208.                     N2 = N
  209.                 End If
  210.                 Do While I1 <= N1 Or I2 <= N2
  211.                     If I1 > N1 Then
  212.                         Do While I2 <= N2
  213.                             I = I + 1#
  214.                             Arr(I - 1#) = BArr(I2 - 1#)
  215.                             I2 = I2 + 1#
  216.                         Loop
  217.                     Else
  218.                         If I2 > N2 Then
  219.                             Do While I1 <= N1
  220.                                 I = I + 1#
  221.                                 Arr(I - 1#) = BArr(I1 - 1#)
  222.                                 I1 = I1 + 1#
  223.                             Loop
  224.                         Else
  225.                             If BArr(I1 - 1#) > BArr(I2 - 1#) Then
  226.                                 I = I + 1#
  227.                                 Arr(I - 1#) = BArr(I2 - 1#)
  228.                                 I2 = I2 + 1#
  229.                             Else
  230.                                 I = I + 1#
  231.                                 Arr(I - 1#) = BArr(I1 - 1#)
  232.                                 I1 = I1 + 1#
  233.                             End If
  234.                         End If
  235.                     End If
  236.                 Loop
  237.             Loop
  238.             I = I + 1#
  239.             Do While I <= N
  240.                 Arr(I - 1#) = BArr(I - 1#)
  241.                 I = I + 1#
  242.             Loop
  243.         End If
  244.         MergeLen = 2# * MergeLen
  245.         C = Not C
  246.     Loop
  247.     If Not C Then
  248.         I = 1#
  249.         Do
  250.             Arr(I - 1#) = BArr(I - 1#)
  251.             I = I + 1#
  252.         Loop Until Not I <= N
  253.     End If
  254. End Sub
  255.  
  256.  
  257.  
  258. 'Метод пузырька
  259. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  260. 'Процедура для сортировки массива методом пузырька
  261. '
  262. 'Входные параметры:
  263. '    Arr -   сортируемый массив.
  264. '            Нумерация элементов от 0 до N-1
  265. '    N   -   размер массива
  266. '
  267. 'Выходные параметры:
  268. '    Arr -   массив, упорядоченный по возрастанию.
  269. '            Нумерация элементов от 0 до N-1
  270. '
  271. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  272. Public Sub BubbleSort(ByRef Arr() As Double, ByRef N As Long)
  273.     Dim I As Long
  274.     Dim J As Long
  275.     Dim Tmp As Double
  276.  
  277.     For I = 0# To N - 1# Step 1
  278.         For J = 0# To N - 2# - I Step 1
  279.             If Arr(J) > Arr(J + 1#) Then
  280.                 Tmp = Arr(J)
  281.                 Arr(J) = Arr(J + 1#)
  282.                 Arr(J + 1#) = Tmp
  283.             End If
  284.         Next J
  285.     Next I
  286. End Sub
  287.  
  288.  
  289.  

Ответить

Номер ответа: 3
Автор ответа:
 Bu



Вопросов: 1
Ответов: 2
 Профиль | | #3 Добавлено: 16.03.10 21:27
пусть первые элементы массива упорядочены

Какие первые и сколько?


не знаю. такое и было задание
спасибо вам огромное

Ответить

Номер ответа: 4
Автор ответа:
 Bu



Вопросов: 1
Ответов: 2
 Профиль | | #4 Добавлено: 16.03.10 23:17
у меня кстати чет нифига не работает. ни первый ни второй вариант пузырьков
пишет мне только первый элемент массива и все(

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам