黑色袜子 发表于 2012-1-9 15:15:29

如何将数字排序[已解决]

本帖最后由 黑色袜子 于 2012-1-9 18:20 编辑

是这样的。

我有一个文本,我将文本中的字符串读到数组,然后得到字符串长度。请问如何按字符串长度排序?从长到短。

再思又想也没好法子。。请指点下思路!

答案请看3L!

wua0550 发表于 2012-1-9 16:32:03

穷举排序~~数据量不是太大的话应该还能凑合用吧#include <Array.au3>

$str = "1,2,bb,cc,1aa,2aaa,aa,3,4,3aaa"
$arr1 = StringSplit($str, ",")
_ArrayDisplay($arr1)
Dim $arr2, $a, $b, $x = 1, $y = 0
$arr2 = $arr1

For $i = 1 To $arr1 - 1
        $a = StringLen($arr1[$i])
        If $a > $b Then $b = $a

Next


For $i = 1 To $arr1
        If StringLen($arr1[$i]) = $x Then
                $y += 1
                $arr2[$y] = $arr1[$i]
        EndIf
        If $i = $arr1 Then
                If $x=$b Then ExitLoop
                $x += 1
                $i = 1
               
        EndIf
       
Next
_ArrayDisplay($arr2)

Duvet 发表于 2012-1-9 17:23:50


#Include <Array.au3>
Local $oArray = StringSplit("1,2,bb,cc,1aa,2aaa,aa,3,4,3aaa,5464a", ",", 3)
Local $oArrayTotal = UBound($oArray)
Local $tArray[$oArrayTotal]
While $oArrayTotal > 0
        $oArrayTotal -= 1
        $tArray[$oArrayTotal] = $oArray[$oArrayTotal]
        $tArray[$oArrayTotal] = StringLen($oArray[$oArrayTotal])
WEnd
_ArraySort($tArray, 1, 0, $oArrayTotal, 1)
$oArrayTotal = UBound($oArray)
While $oArrayTotal > 0
        $oArrayTotal -= 1
        $oArray[$oArrayTotal] = $tArray[$oArrayTotal]
WEnd
_ArrayDisplay($oArray)

;因為採用快速排列法,結果不穩定

黑色袜子 发表于 2012-1-9 18:18:27

回复 2# wua0550


    呵呵,就是不想用枚举才过来问的。现在解决了。

黑色袜子 发表于 2012-1-9 18:19:03

回复 3# Duvet


    蒽,我也是用_arraysort解决了。谢谢
页: [1]
查看完整版本: 如何将数字排序[已解决]