-
Perhatikan potongan program di bawah ini!
var data1 : array[1..10] of integer = (3,9,2,2,1,5,7,5,5,8); data2,data3 : array[1..10] of integer; i : integer; begin for i:= 1 to 10 do data2[i] := 0; for i:= 1 to 10 do inc(data2[data1[i]]); for i:= 2 to 10 do data2[i] := data2[i] + data2[i-1]; for i:= 10 downto 1 do begin data3[data2[data1[i]]] := data1[i]; dec(data2[data1[i]]); end; for i:= 1 to 10 do write(data3[i]); end.
Keluaran dari program di atas adalah ….
Semua elemen data2 awalnya bernilai 0, kemudian bertambah setiap data2[data1[i]] yang mana
pertambahan akan sesuai dengan jumlah setiap nilai pada data1. Sehingga data2 menjadi:
(1,2,1,0,3,0,1,1,1,0)
Setelah itu nilai data[2] akan ditambahkan dengan tepat di sebelah kirinya, sehingga menjadi:
(1,3,4,4,7,7,8,9,10,10)
Setiap elemen pada data1 akan menjadi index dari data2 untuk perulangan berikutnya.
Jadi dimulai dari i = 10: data1[10] = 8, data2[8] = 9, data3[9] = 8.
data2: (1,3,4,4,7,7,8,8,10,10)
data3: (0,0,0,0,0,0,0,0,8,0)
i = 9: data1[9] = 5, data2[5] = 7, data3[7] = 5.
data2: (1,3,4,4,6,7,8,8,10,10)
data3: (0,0,0,0,0,0,5,0,8,0)
i = 8: data1[8] = 5, data2[5] = 6, data3[6] = 5.
data2: (1,3,4,4,5,7,8,8,10,10)
data3: (0,0,0,0,0,5,5,0,8,0)
i = 7: data1[7] = 7, data2[7] = 8, data3[8] = 7.
data2: (1,3,4,4,5,7,8,8,10,10)
data3: (0,0,0,0,0,5,5,7,8,0)
Jika diteruskan, data2 dengan index yang tidak terdapat pada data1 tidak akan berubah, sedangkan
data3 akan bernilai data1 dimulai dari (1,3,4,4,7,7,8,9,10,10) [data2] dengan jumlah masing-masing
(1,2,1,0,3,0,1,1,1,0) [data2] ke kiri.
Dengan demikian data3 akan berisi:
(1,2,2,3,5,5,5,7,8,9)
Keluaran program = 1223555789.