数を要素とする配列 lst が与えられたとき,その配列をソートしたときのそのデータの位置とlstの中の位置のズレの総和を計算する関数 f(lst)を作りたいです.現状のプログラムでは,ただクイックソートを行うだけなので,ズレの総和を計算するにはどうすれば良いでしょうか?
Javascript
1function f(lst){ 2 function quicksort(a, l, r){ 3 var v, i, j 4 if (r > l){ 5 v = a[r]; 6 [i, j] = [l - 1, r] 7 while (true){ 8 i += 1; while (a[i] < v) i += 1 9 j -= 1; while (a[j] > v) j -= 1 10 if (j <= i) break; 11 [a[i], a[j]] = [a[j], a[i]] 12 } 13 [a[i], a[r]] = [a[r], a[i]] 14 quicksort(a, l, i - 1) 15 quicksort(a, i + 1, r) 16 } 17 } 18 var count = 0 19 var a = lst 20 quicksort(a, 0, a.length -1) 21 puts(count) 22 return a 23} 24var lst = [ 1,2, 3, 6, 8] 25puts(f(lst))
実際に求めたい出力結果の例が以下のとおりです.
f([4,3,2,1]) = 8
f([2,3,2,1]) = 6
f([1,2,3,6,8]) = 0
f([9,1,2,3,6]) = 8
f([1,1,1,1,1]) = 0
回答2件
あなたの回答
tips
プレビュー