def pivot2(arr,index,i,j,ord)
k = i + 1
while (k <= j) && (arr[i][index] == arr[k][index]) do k = k + 1; end
if k > j then return -1; end
if ord
if arr[i][index] >= arr[k][index] then return i; end
else
if arr[i][index] <= arr[k][index] then return i; end
end
return k
end
def partition2(arr,index,i,j,x,ord)
l = i; r = j
while l <= r
if ord
while (l <= j) && (arr[l][index] < x) do l = l + 1; end
while (r >= i) && (arr[r][index] >= x) do r = r - 1; end
else
while (l <= j) && (arr[l][index] > x) do l = l + 1; end
while (r >= i) && (arr[r][index] <= x) do r = r - 1; end
end
if l <= r
t = arr[l]; arr[l] = arr[r]; arr[r] = t
l = l + 1; r = r - 1
end
end
return l
end
def quickSort2(arr,index,i,j,ord)
if i != j
p = pivot2(arr,index,i,j,ord)
if p != -1
k = partition2(arr,index,i,j,arr[p][index],ord)
arr = quickSort2(arr,index,i,(k - 1),ord)
arr = quickSort2(arr,index,k,j,ord)
end
end
return arr
end
#使用時はこの関数のみ
#第1引数:配列 第2引数:ソート対象のインデックス 第3引数:昇順 true / 降順 false
def sortArray2(arr,index,ord)
return quickSort2(arr,index,0,(getArrayLength(arr) - 1),ord)
end
配列を二次元配列aにして、a[i][0]に数値を入れて並び替えるような時、
数値の桁が違うと数値が順番にならないようです
このように、一次元配列でない時、文字列的な比較での並び替えになるようです
配列a[i][0]にスコア、a[i][1]にプレイヤー名などを入れて、
a[i][0]のスコアを並び替えてランキングを作る・・・みたいなことをしたかったので、
100以下の数値の時に、数値の前に" "を足して使ってます。
しかし、原因がよくわからないため、報告しました。
今回の例でいくと、
「88,0」「89,1」「109,2」「60,3」「960,4」という『,』を含んだ値=文字列のソート判定となり、
想定された動作にならないことを確認いたしました
きれいな関数なので自分では理由がわかりませんでした。
理由がわかったことでより使いやすくなりました。
多次元配列用のソート関数を用意しました
こちらをご利用頂けましたら幸いです
<サンプル>