一个将字符串排序为指定顺序的算法
本帖最后由 大绯狼 于 2012-1-11 20:07 编辑由于工作中遇到一个问题 需要将字符串排序为指定格式,并且每一步只能交换相邻2个元素的位置,看看大家是否能有好的办法
例子如下
原字符串
abcdefghijklmnopqrstuvwxyz
指定样式
qwertyuiopasdfghjklzxcvbnm
允许使用UDF,但是排序部分必须每一步只交换相邻元素位置
先抛个砖,正常的排序方法,使用179步
#include <Array.au3>
Global $before, $after,$stepNum
$before = StringSplit("abcdefghijklmnopqrstuvwxyz", "", 2)
$after = StringSplit("qwertyuiopasdfghjklzxcvbnm", "", 2)
sort()
MsgBox(0,0,$stepNum)
Func sort()
$stepNum=0
$sIndex = 1
For $i In $after
$count = UBound($after) - 1
$index = _ArraySearch($before, $i)
For $j = $sIndex To $index
If ($index > 0 And $index <=$count) Then
$temp = $before[$index - 1]
$before[$index - 1] = $before[$index]
$before[$index] = $temp
$index -= 1
$stepNum+=1
EndIf
Next
$sIndex += 1
Next
EndFunc 貌似思路一样,都是笨方法
#include <Array.au3>
Global $before, $after, $stepNum = 0
$before = StringSplit("abcdefghijklmnopqrstuvwxyz", "", 2)
$after = StringSplit("qwertyuiopasdfghjklzxcvbnm", "", 2)
sort()
MsgBox(0, 0, $stepNum)
_ArrayDisplay($before)
Func sort()
For $i = 0 To UBound($after) - 1
$temp = $after[$i]
$index = _ArraySearch($before, $temp)
If $index > 0 And $index < UBound($before) Then
For $n = $index To $i + 1 Step -1
$stepNum += 1
_ArraySwap($before[$n], $before[$n - 1])
Next
EndIf
Next
EndFunc ;==>sort
既然说了是相邻两两交换,就只能冒泡了,这个冒泡还有冒的更快的啊?
页:
[1]