challenge データの整列

(x, y) の座標情報を以下の2種類の方法で整列する機能を実現してください。

  • (x, y) の辞書順(まず x で昇順に整列して、x が同じデータに対して y で昇順に整列する)
  • (0, 0) からの距離の昇順

データの表現方法はタプルなり構造体/オブジェクトなり各自で適当に選んで下さい。

Posted feedbacks - BASIC

バブルソートってこんな感じだったかな。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
100   DATANUM = 5  ' データ個数
110 'データX、データY、並び替え配列
120   dim x(DATANUM), y(DATANUM), idx(DATANUM)
130 '関数:データ0と1が辞書順に整列してない場合に真
140   def fnNoSort0(x0,y0,x1,y1) = (x0 > x1) or ((x0 <= x1) and (y0 > y1))
150 '関数:データ0と1が距離順に整列してない場合に真
160   def fnNoSort1(x0,y0,x1,y1) = (x0 * x0 + y0 * y0 ) > (x1 * x1 + y1 * y1)
170 '関数:整列後のX, Y を取得する
180   def fnX(n) = dx(idx(n))
190   def fnY(n) = dy(idx(n))
200 'メイン
210   gosub *DataLoad
220   mode = 0 : gosub *Sort : print "辞書順" : gosub *PrintData
230   mode = 1 : gosub *Sort : print "距離順" : gosub *PrintData
240   end
250 'データロード
260 *DataLoad
270   for i = 1 to DATANUM
280     read dx(i), dy(i)
290     idx(i) = i
300   next i
310   return
320 'データ表示
330 *PrintData
340   for i = 1 to DATANUM
350     print fnX(i), fnY(i)
360   next i
370   return
380 'ソート
390 *Sort
400   for i = 1 to DATANUM - 1
410     for j = i + 1 to DATANUM
420       if mode = 0 and fnNoSort0(fnX(i),fnY(i),fnX(j),fnY(j)) then *doSwap
430       if mode = 1 and fnNoSort1(fnX(i),fnY(i),fnX(j),fnY(j)) then *doSwap
440       goto *goNext
450      *doSwap
460       swap idx(i), idx(j)
470      *goNext
480     next j
490   next i
500   return
510 'データ
520 data 1,2, 3,4, 1,3, 2,4, 1,8

Index

Feed

Other

Link

Pathtraq

loading...