『スクリプト 汎用関数』 配列をソートする

投稿者:Cdv30200 aoi icon mini aoihikawa 投稿日:2012/01/30 19:00

配列をソートする
(ご自由にご利用ください)

#配列ソート
def pivot(arr,i,j,ord)
  k = i + 1
  while (k <= j) && (arr[i] == arr[k]) do k = k + 1; end
  if k > j then return -1; end
  if ord
    if arr[i] >= arr[k] then return i; end
  else
    if arr[i] <= arr[k] then return i; end
  end
  return k
end

def partition(arr,i,j,x,ord)
  l = i; r = j
  while l <= r
    if ord
      while (l <= j) && (arr[l] < x) do l = l + 1; end
      while (r >= i) && (arr[r] >= x) do r = r - 1; end
    else
      while (l <= j) && (arr[l] > x) do l = l + 1; end
      while (r >= i) && (arr[r] <= 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 quickSort(arr,i,j,ord)
  if i != j
    p = pivot(arr,i,j,ord)
    if p != -1
      k = partition(arr,i,j,arr[p],ord)
      arr = quickSort(arr,i,(k - 1),ord)
      arr = quickSort(arr,k,j,ord)
    end
  end
  return arr
end

#使用時はこの関数のみ
#第1引数:配列 第2引数:昇順 true / 降順 false
def sortArray(arr,ord)
  return quickSort(arr,0,(getArrayLength(arr) - 1),ord)
end


 使用例
aList = createArray()
aList[0] = 3 
aList[1] = 1 
aList[2] = 4
aList[3] = 6
aList[4] = 2
aList[5] = 8
aList[6] = 7
aList[7] = 5
aList[8] = 9
aList[9] = 3

#配列を降順に並べ替え
aList = sortArray(aList, false)
speak(aList) #9,8,7,6,5,4,3,3,2,1


bList = createArray()
bList[0] = "すみれ"
bList[1] = "ひまわり"
bList[2] = "あかね"
bList[3] = "なずな"
bList[4] = "あおい"
bList[5] = "われもこう"
bList[6] = "ききょう"
bList[7] = "れんげ"
bList[8] = "すずらん"
bList[9] = "あんず"

#配列を昇順に並べ替え
bList = sortArray(bList, true)
speak(bList) #あおい,あかね,あんず,ききょう,すずらん,すみれ,なずな,ひまわり,れんげ,われもこう


参考文献:クイックソート

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Material 279531 12 mini コンバイラ(投稿日:2017/02/25 01:07, 履歴)
関数定義文のなかでその関数つかえるんですか!?
すごくあたまがこんがらがります。

あと、文字列ってどうやって比べているんですか?
Cdv30200 aoi icon mini aoihikawa(投稿日:2017/02/25 03:21, 履歴)
文字は文字コード順として処理内部で扱われているため
深く考えなくても、アルファベット順、あいうえお順等で並びます

そのため、漢字交じりの文字列の場合は
意図した動作にならないかもしれません