ForNext
Only Do What Only You Can Do
089. 5人の学生を 身長で ソート (配列)
VBScript
JScript
Perl
更新日 : 2010.10.18
$NINSU = 5; sub swap { my ($x, $y) = @_; $tmp = $$x; $$x = $$y; $$y = $tmp; } sub sort { my ($height, $name, $n) = @_; $k = $$n - 1; while ($k >= 0) { $j = -1; foreach $i(1..$k) { if ($$height[$i - 1] > $$height[$i]) { $j = $i - 1; &swap(\$$height[$i], \$$height[$j]); &swap(\$$name[$i], \$$name[$j]); } } $k = $j; } } @height = (178, 175, 173, 165, 179); @name = ("Sato", "Sanaka", "Takao", "Mike", "Masaki"); print "ソート前:\n"; for (0..$NINSU-1) { printf("%2d:%-8s%4d\n", $_ + 1, $name[$_], $height[$_]); } print "\n"; &sort(\@height, \@name, \$NINSU); print "ソート後:\n"; for (0..$NINSU-1) { printf("%2d:%-8s%4d\n", $_ + 1, $name[$_], $height[$_]); }
L:\>perl lesson_12_089.pl メ[ト前: 1:Sato 178 2:Sanaka 175 3:Takao 173 4:Mike 165 5:Masaki 179 メ[ト後: 1:Mike 165 2:Takao 173 3:Sanaka 175 4:Sato 178 5:Masaki 179
PHP
更新日 : 2010.11.03
<?php $NINSU = 5; function swap(&$x, &$y) { $tmp = $x; $x = $y; $y = $tmp; } function sort1(&$height, &$name, $n) { $k = $n - 1; while ($k >= 0) { $j = -1; for ($i = 1; $i <= $k; $i++) { if ($height[$i - 1] > $height[$i]) { $j = $i - 1; swap($height[$i], $height[$j]); swap($name[$i], $name[$j]); } } $k = $j; } } $height = array(178, 175, 173, 165, 179); $name = array("Sato", "Sanaka", "Takao", "Mike", "Masaki"); print "ソート前:\n"; for ($i = 0; $i < $NINSU; $i++) { printf("%2d:%-8s%4d\n", $i + 1, $name[$i], $height[$i]); } print "\n"; sort1($height, $name, $NINSU); print "ソート後:\n"; for ($i = 0; $i < $NINSU; $i++) { printf("%2d:%-8s%4d\n", $i + 1, $name[$i], $height[$i]); } ?>
L:\>php lesson_12_089.php ソート前: 1:Sato 178 2:Sanaka 175 3:Takao 173 4:Mike 165 5:Masaki 179 ソート後: 1:Mike 165 2:Takao 173 3:Sanaka 175 4:Sato 178 5:Masaki 179
Python
更新日 : 2010.11.17
# coding: Shift_JIS NINSU = 5 def sort(height, name, n): k = n - 1 while (k >= 0): j = -1; for i in range(1, k + 1, 1): if (height[i - 1] > height[i]): j = i - 1 height[i], height[j] = height[j], height[i] name[i], name[j] = name[j], name[i] k = j height = [178, 175, 173, 165, 179] name = ["Sato", "Sanaka", "Takao", "Mike", "Masaki"] print "ソート前:" for i in range(0, NINSU, 1): print "%2d:%-8s%4d" % (i + 1, name[i], height[i]) print sort(height, name, NINSU) print "ソート後:" for i in range(0, NINSU, 1): print "%2d:%-8s%4d" % (i + 1, name[i], height[i])
N:\>python lesson_12_089.py ソート前: 1:Sato 178 2:Sanaka 175 3:Takao 173 4:Mike 165 5:Masaki 179 ソート後: 1:Mike 165 2:Takao 173 3:Sanaka 175 4:Sato 178 5:Masaki 179
Ruby
更新日 : 2010.11.01
NINSU = 5 def sort(height, name, n) k = n - 1 while (k >= 0) j = -1 for i in 1..k if (height[i - 1] > height[i]) j = i - 1 height[i], height[j] = height[j], height[i] name[i], name[j] = name[j], name[i] end end k = j end end height = [178, 175, 173, 165, 179] name = ["Sato", "Sanaka", "Takao", "Mike", "Masaki"] puts "ソート前:" height.each_with_index do |h, i| printf("%2d:%-8s%4d\n", i + 1, name[i], h) end puts "" sort(height, name, NINSU) puts "ソート後:" i = 1 height.zip(name) do |h, n| printf("%2d:%-8s%4d\n", i, n, h) i += 1 end
L:\>ruby l:\lesson_12_089.rb メ[ト前: 1:Sato 178 2:Sanaka 175 3:Takao 173 4:Mike 165 5:Masaki 179 メ[ト後: 1:Mike 165 2:Takao 173 3:Sanaka 175 4:Sato 178 5:Masaki 179
PowerShell
Scala
F#
C
更新日 : 2010.10.08
#include <stdio.h> #include <string.h> #define NINSU 5 void swap(int* x, int* y) { int tmp = *x; *x = *y; *y = tmp; } void swaps(char sx[], char sy[]) { char tmp[256]; strcpy(tmp, sx); strcpy(sx, sy); strcpy(sy, tmp); } void sort(int data[], char name[][20], int n) { int k = n - 1; while (k >= 0) { int i, j; for (i = 1, j = -1; i <= k; i++) { if (data[i - 1] > data[i]) { j = i - 1; swap(&data[i], &data[j]); swaps(name[i], name[j]); } } k = j; } } int main(int argc, char* argv[]) { int i; int height[] = {178, 175, 173, 165, 179}; char name[][20] = {"Sato", "Sanaka", "Takao", "Mike", "Masaki"}; puts("ソート前:"); for (i = 0; i < NINSU; i++) printf("%2d:%-8s%4d\n", i + 1, name[i], height[i]); puts(""); sort(height, name, NINSU); puts("ソート後:"); for (i = 0; i < NINSU; i++) printf("%2d:%-8s%4d\n", i + 1, name[i], height[i]); return 0; }
R:\>lesson089\project1.exe ソート前: 1:Sato 178 2:Sanaka 175 3:Takao 173 4:Mike 165 5:Masaki 179 ソート後: 1:Mike 165 2:Takao 173 3:Sanaka 175 4:Sato 178 5:Masaki 179
C++
C++Builder
VC++
C#
Java
更新日 : 2010.11.05
class Lesson089 { static final int NINSU = 5; public static void main(String[] args) { int[] height = {178, 175, 173, 165, 179}; String[] name = {"Sato", "Sanaka", "Takao", "Mike", "Masaki"}; System.out.println("ソート前:"); for (int i = 0; i < NINSU; i++) System.out.printf("%2d:%-8s%4d\n", i + 1, name[i], height[i]); System.out.println(""); sort(height, name, NINSU); System.out.println("ソート後:"); for (int i = 0; i < NINSU; i++) System.out.printf("%2d:%-8s%4d\n", i + 1, name[i], height[i]); } static void sort(int height[], String name[], int n) { int k = n - 1; while (k >= 0) { int j = -1; for (int i = 1; i <= k; i++) { if (height[i - 1] > height[i]) { j = i - 1; int tmp = height[i]; height[i] = height[j]; height[j] = tmp; String s = name[i]; name[i] = name[j]; name[j] = s; } } k = j; } } }
L:\>javac lesson_12_089.java L:\>java Lesson089 ソート前: 1:Sato 178 2:Sanaka 175 3:Takao 173 4:Mike 165 5:Masaki 179 ソート後: 1:Mike 165 2:Takao 173 3:Sanaka 175 4:Sato 178 5:Masaki 179
Objective-C
D
VB
VB.NET
Delphi
更新日 : 2010.09.24
program Project1; {$APPTYPE CONSOLE} uses SysUtils; const NINSU = 5; procedure swap(var nx:Integer; var ny:Integer); var tmp: Integer; begin tmp := nx; nx := ny; ny := tmp; end; procedure swaps(var sx:String; var sy:String); var tmp: String; begin tmp := sx; sx := sy; sy := tmp; end; procedure sort(var data:array of Integer; var name:array of String; n:Integer); var i, j, k: Integer; begin k := High(data); while (k >= 0) do begin j := -1; for i := Low(data) + 1 to k do begin if (data[i - 1] > data[i]) then begin j := i - 1; swap(data[i], data[j]); swaps(name[i], name[j]); end; end; k := j; end; end; procedure main(); var i: Integer; height: array[1..5] of Integer; name: array[1..5] of String; begin height[1] := 178; height[2] := 175; height[3] := 176; height[4] := 165; height[5] := 179; name[1] := 'Sato'; name[2] := 'Sanaka'; name[3] := 'Takao'; name[4] := 'Mike'; name[5] := 'Masaki'; Writeln('ソート前:'); for i := 1 to NINSU do Writeln(Format('%2d:%-8s%4d', [i, name[i], height[i]])); Writeln(''); sort(height, name, NINSU); Writeln('ソート後:'); for i := 1 to NINSU do Writeln(Format('%2d:%-8s%4d', [i, name[i], height[i]])); end; begin main; end.
S:\>lesson089\project1.exe ソート前: 1:Sato 178 2:Sanaka 175 3:Takao 176 4:Mike 165 5:Masaki 179 ソート後: 1:Mike 165 2:Sanaka 175 3:Takao 176 4:Sato 178 5:Masaki 179