Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 | 3 |

 

  Вопрос: Сортировка массива Добавлено: 21.08.12 06:09  

Автор вопроса:  vitaliy_84 | Web-сайт: vitalij_kovalenko_1984.mail.ru
Как отсортировать массив по мере уменьшения колличества символов и в алфавитном порядке

Ответить

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

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



ICQ: 237822510 

Вопросов: 28
Ответов: 1182
 Профиль | | #1 Добавлено: 21.08.12 12:08
Хотя бы пузырек. Поиск по форуму пробовал? Ты не первый.

Ответить

Номер ответа: 2
Автор ответа:
 К0ВAЛЄHK0



Вопросов: 0
Ответов: 22
 Профиль | | #2 Добавлено: 21.08.12 14:09
Не пробовал. У вас так необычно. Что за пузырек?

Ответить

Номер ответа: 3
Автор ответа:
 К0ВAЛЄHK0



Вопросов: 0
Ответов: 22
 Профиль | | #3 Добавлено: 21.08.12 14:10
Не пробовал. У вас так необычно. Что за пузырек?

Ответить

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



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #4
Добавлено: 21.08.12 14:20
алгоритм сортировки такой, самый простейший.

Ответить

Номер ответа: 5
Автор ответа:
 К0ВAЛЄHK0



Вопросов: 0
Ответов: 22
 Профиль | | #5 Добавлено: 21.08.12 14:45
Так он поможет в моем случае. Опиши пожалуйста

Ответить

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



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #6
Добавлено: 21.08.12 15:16
  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. '&#204;&#229;&#242;&#238;&#228; &#211;&#232;&#235;&#252;&#255;&#236;&#224; &#212;&#235;&#238;&#233;&#228;&#224; (&#225;&#232;&#237;&#224;&#240;&#237;&#251;&#245; &#228;&#229;&#240;&#229;&#226;&#252;&#229;&#226;)
  53. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  54. '&#207;&#240;&#238;&#246;&#229;&#228;&#243;&#240;&#224; &#228;&#235;&#255; &#243;&#239;&#238;&#240;&#255;&#228;&#238;&#247;&#232;&#226;&#224;&#237;&#232;&#255; &#236;&#224;&#241;&#241;&#232;&#226;&#224; &#239;&#232;&#240;&#224;&#236;&#232;&#228;&#224;&#235;&#252;&#237;&#238;&#233; &#241;&#238;&#240;&#242;&#232;&#240;&#238;&#226;&#234;&#238;&#233;
  55. '
  56. '&#194;&#245;&#238;&#228;&#237;&#251;&#229; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#251;:
  57. '    Arr -   &#241;&#238;&#240;&#242;&#232;&#240;&#243;&#229;&#236;&#251;&#233; &#236;&#224;&#241;&#241;&#232;&#226;.
  58. '            &#205;&#243;&#236;&#229;&#240;&#224;&#246;&#232;&#255; &#253;&#235;&#229;&#236;&#229;&#237;&#242;&#238;&#226; &#238;&#242; 0 &#228;&#238; N-1
  59. '    N   -   &#240;&#224;&#231;&#236;&#229;&#240; &#236;&#224;&#241;&#241;&#232;&#226;&#224;
  60. '
  61. '&#194;&#251;&#245;&#238;&#228;&#237;&#251;&#229; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#251;:
  62. '    Arr -   &#236;&#224;&#241;&#241;&#232;&#226;, &#243;&#239;&#238;&#240;&#255;&#228;&#238;&#247;&#229;&#237;&#237;&#251;&#233; &#239;&#238; &#226;&#238;&#231;&#240;&#224;&#241;&#242;&#224;&#237;&#232;&#254;.
  63. '            &#205;&#243;&#236;&#229;&#240;&#224;&#246;&#232;&#255; &#253;&#235;&#229;&#236;&#229;&#237;&#242;&#238;&#226; &#238;&#242; 0 &#228;&#238; 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. '&#204;&#229;&#242;&#238;&#228; &#241;&#235;&#232;&#255;&#237;&#232;&#233;
  127. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  128. '&#207;&#240;&#238;&#246;&#229;&#228;&#243;&#240;&#224; &#228;&#235;&#255; &#241;&#238;&#240;&#242;&#232;&#240;&#238;&#226;&#234;&#232; &#236;&#224;&#241;&#241;&#232;&#226;&#224; &#236;&#229;&#242;&#238;&#228;&#238;&#236; &#244;&#238;&#237; &#205;&#229;&#233;&#236;&#224;&#237;&#224; (&#241;&#235;&#232;&#255;&#237;&#232;&#233;)
  129. '
  130. '&#194;&#245;&#238;&#228;&#237;&#251;&#229; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#251;:
  131. '    Arr -   &#241;&#238;&#240;&#242;&#232;&#240;&#243;&#229;&#236;&#251;&#233; &#236;&#224;&#241;&#241;&#232;&#226;.
  132. '            &#205;&#243;&#236;&#229;&#240;&#224;&#246;&#232;&#255; &#253;&#235;&#229;&#236;&#229;&#237;&#242;&#238;&#226; &#238;&#242; 0 &#228;&#238; N-1
  133. '    N   -   &#240;&#224;&#231;&#236;&#229;&#240; &#236;&#224;&#241;&#241;&#232;&#226;&#224;
  134. '
  135. '&#194;&#251;&#245;&#238;&#228;&#237;&#251;&#229; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#251;:
  136. '    Arr -   &#236;&#224;&#241;&#241;&#232;&#226;, &#243;&#239;&#238;&#240;&#255;&#228;&#238;&#247;&#229;&#237;&#237;&#251;&#233; &#239;&#238; &#226;&#238;&#231;&#240;&#224;&#241;&#242;&#224;&#237;&#232;&#254;.
  137. '            &#205;&#243;&#236;&#229;&#240;&#224;&#246;&#232;&#255; &#253;&#235;&#229;&#236;&#229;&#237;&#242;&#238;&#226; &#238;&#242; 0 &#228;&#238; 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. '&#204;&#229;&#242;&#238;&#228; &#239;&#243;&#231;&#251;&#240;&#252;&#234;&#224;
  259. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  260. '&#207;&#240;&#238;&#246;&#229;&#228;&#243;&#240;&#224; &#228;&#235;&#255; &#241;&#238;&#240;&#242;&#232;&#240;&#238;&#226;&#234;&#232; &#236;&#224;&#241;&#241;&#232;&#226;&#224; &#236;&#229;&#242;&#238;&#228;&#238;&#236; &#239;&#243;&#231;&#251;&#240;&#252;&#234;&#224;
  261. '
  262. '&#194;&#245;&#238;&#228;&#237;&#251;&#229; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#251;:
  263. '    Arr -   &#241;&#238;&#240;&#242;&#232;&#240;&#243;&#229;&#236;&#251;&#233; &#236;&#224;&#241;&#241;&#232;&#226;.
  264. '            &#205;&#243;&#236;&#229;&#240;&#224;&#246;&#232;&#255; &#253;&#235;&#229;&#236;&#229;&#237;&#242;&#238;&#226; &#238;&#242; 0 &#228;&#238; N-1
  265. '    N   -   &#240;&#224;&#231;&#236;&#229;&#240; &#236;&#224;&#241;&#241;&#232;&#226;&#224;
  266. '
  267. '&#194;&#251;&#245;&#238;&#228;&#237;&#251;&#229; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#251;:
  268. '    Arr -   &#236;&#224;&#241;&#241;&#232;&#226;, &#243;&#239;&#238;&#240;&#255;&#228;&#238;&#247;&#229;&#237;&#237;&#251;&#233; &#239;&#238; &#226;&#238;&#231;&#240;&#224;&#241;&#242;&#224;&#237;&#232;&#254;.
  269. '            &#205;&#243;&#236;&#229;&#240;&#224;&#246;&#232;&#255; &#253;&#235;&#229;&#236;&#229;&#237;&#242;&#238;&#226; &#238;&#242; 0 &#228;&#238; 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.  

Ответить

Номер ответа: 7
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #7 Добавлено: 21.08.12 18:12
Все кроме пузырька реализовано как говно

Ответить

Номер ответа: 8
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 134
 Профиль | | #8 Добавлено: 21.08.12 19:56
|A|W|P|, а почему ты все константы типа Double делаешь (с решёткой)? Если это vb6, то лучше Long (0&, 1& ...), а если vb.net, то вообще без суффикса.

Ответить

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



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #9
Добавлено: 21.08.12 20:42
Mikle, Artyom
Код не мой, я просто погуглил за него.

Ответить

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



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #10
Добавлено: 21.08.12 20:43
Artyom
Надо сказать, что и пузырек реализован не совсем правильно.

Ответить

Номер ответа: 11
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #11
Добавлено: 22.08.12 00:27
Ну ребят, ну чо вы дурью маетесь - зачем самим писать алгоритмы сортировки, да ещё и эпические "пузырьки". Сделали б quicksort что ли для разнообразия - может челу для собеседования и его пошлют есть хот-доги с вашими пузырьками.

Ответить

Номер ответа: 12
Автор ответа:
 Александр



Вопросов: 1
Ответов: 15
 Профиль | | #12 Добавлено: 22.08.12 07:35
Если это vb6, то лучше Long (0&, 1& ...),

На каком основании сделаны такие категоричные выводы?
Где-то читал, что в 32 разрядной системе именно Дабл обрабатывается быстрей

Ответить

Номер ответа: 13
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 134
 Профиль | | #13 Добавлено: 22.08.12 09:35
Александр, Double, возможно, обрабатывается быстрее, чем Float, но никак не быстрее, чем int32, то есть Long в терминологии vb6.

Ответить

Номер ответа: 14
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 134
 Профиль | | #14 Добавлено: 22.08.12 09:38
Тем более, что там всё равно к лонгу приводится:
  1. For I = 0# To N - 1# Step 1

И "Step 1" тоже очень загадочно выглядит :).

Ответить

Номер ответа: 15
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #15
Добавлено: 22.08.12 15:11
quick sort http://www.vbforums.com/showthread.php?t=231925
Кстати долго сейчас втыкал в суть задачи. По алфавиту и по мере уменьшения символов ОДНОВРЕМЕННО?:-) Вряд ли

Ответить

Страница: 1 | 2 | 3 |

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



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