Как сделать натуральную сортировку в 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 или другие устаревшие коллекции для решения.