Как сделать натуральную сортировку в Classic ASP?

У меня есть массив со следующими значениями:

arr_ReportsData = Array("0_1 Company Overview", "10_1 Rank by Locations", "1_1 Trend by Business Units", "2_1 Trend by Questions", "11_1 Rank by Locations")

Мне нужно заказать их естественно (в алфавитном порядке).

Ожидаемый результат:

  • 0_1 Отчет1
  • 1_1 Отчет2
  • 2_1 Отчет3
  • 10_1 Отчет4
  • 11_1 Отчет5

Я старался bubble sort а также quick sort, но результат для обоих алгоритмов, конечно, был в алфавитном порядке.

Фактический вывод:

  • 0_1 Отчет1
  • 10_1 Отчет4
  • 11_1 Отчет5
  • 1_1 Отчет2
  • 2_1 Отчет3

Проблема: я не могу найти ничего похожего на настоящий алгоритм для этого случая. Должен ли я написать какой-то обходной путь, как разделение чисел и разбор в целое число, а затем сортировка?

Это то, что я пытался и работает (но не для моего случая):

'Bubble sort
For i = LBound(arr_ReportsData) to UBound(arr_ReportsData)
  For j = LBound(arr_ReportsData) to UBound(arr_ReportsData) - 1
      If arr_ReportsData(j) > arr_ReportsData(j + 1) Then
         TempValue = arr_ReportsData(j + 1)
         arr_ReportsData(j + 1) = arr_ReportsData(j)
         arr_ReportsData(j) = TempValue
      End If
  Next
Next



Sub QuickSort (vec,loBound,hiBound)

  Dim pivot,loSwap,hiSwap,temp,counter
  '== Two items to sort
  if hiBound - loBound = 1 then
    if vec(loBound) > vec(hiBound) then
      Call SwapRows(vec,hiBound,loBound)
    End If
  End If

  '== Three or more items to sort
    pivot = vec(int((loBound + hiBound) / 2))
    vec(int((loBound + hiBound) / 2)) = vec(loBound)
    vec(loBound) = pivot

  loSwap = loBound + 1
  hiSwap = hiBound
  Do
    '== Find the right loSwap
    while loSwap < hiSwap and vec(loSwap) <= pivot
      loSwap = loSwap + 1
    wend
    '== Find the right hiSwap
    while vec(hiSwap) > pivot
      hiSwap = hiSwap - 1
    wend
    '== Swap values if loSwap is less then hiSwap
    if loSwap < hiSwap then Call SwapRows(vec,loSwap,hiSwap)


  Loop While loSwap < hiSwap

    vec(loBound) = vec(hiSwap)
    vec(hiSwap) = pivot

  '== Recursively call function .. the beauty of Quicksort
    '== 2 or more items in first section
    if loBound < (hiSwap - 1) then Call QuickSort(vec,loBound,hiSwap-1)
    '== 2 or more items in second section
    if hiSwap + 1 < hibound then Call QuickSort(vec,hiSwap+1,hiBound)

End Sub

Быстрая сортировка, которую я взял из ответа на этот вопрос: сортировка массива раз в Classic ASP

Примечание: я не могу использовать System.Collections.ArrayList или другие устаревшие коллекции для решения.

0 ответов

Другие вопросы по тегам