コメント

このコメントは、【Wiki】スクリプト/汎用関数/配列をソートするへのコメントです。

コメントの内容

Cdv30200 aoi icon mini aoihikawa(投稿日:2017/04/05 21:04/05/17)
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


多次元配列用のソート関数を用意しました
こちらをご利用頂けましたら幸いです


<サンプル>
#配列内、0番目の配列データをソート対象にする
aa=sortArray2(aa,0,false)
speak(aa[0][0], aa[1][0], aa[2][0], aa[3][0], aa[4][0])

コメントの内容(一番最初の投稿)

Cdv30200 aoi icon mini aoihikawa(投稿日:2017/04/05 21:04/05/17)
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


多次元配列用のソート関数を用意しました
こちらをご利用頂けましたら幸いです