見出し画像

C言語教室 第27回 いろいろなソート(続)(回答提出)(1)

こちらの記事の回答です。

課題
1. 整数と文字列を持つ構造体のリストを用意して、整数での並べかえと文字列での並べかえを、それぞれ昇順でマージソートする関数を書きなさい。
2. 文字列(ポインタの)配列をマージソートする関数を書きなさい。

再帰を用いないリストのマージソートも見てみたいのですが、ちょっと大変そうです。解答は用意しないので、興味のある方は自由課題として挑戦してみてください。

今回、できたのは課題1のみ。

タイトルにある、(続)がついて、さらに(1)ってなんなんだという感じですけど、「いろいろなソート」はkznさんが既に記事を書いていらっしゃって今回はその続編なので(続)です。リンク先の記事には課題が2つ、演習が1つあって、私が今回回答したのは課題1だけです。なので(1)ということになりました。

マージソートよりも「Node」のライブラリ設計に思考を費やしていた感じです。それだけ考えたわりには、なんだかぱっとしない。ほんとに、ライブラリって難しい。カッコイイライブラリヲカイテミタイ....

1.「Node」は循環リストにしてみた

循環リストを使ってみました。終端のある双方向リストと、終端のない循環リストの、どちらがより適当なのかは判断が難しい。結論があったわけではないし、今も明確にはなっていません。どっちも書いてみれば見えてくるのかもしれません。が。今回は循環リストのみ、です。

2.空リストの定義

循環リストの場合は終端がありません。そういう意味では「NULL」はいらないのですが、今回は「NULL」を加えました。

NULL = 空リスト

マージソートの場合、2分割した2つのリストを1つのリストにマージします。このとき、元の2つのリストは「空」になります。この状態を「NULL」と位置付けたわけです。

リストの端を管理するヘッダのようなものを設けるべきかどうか悩みました。

head→node1→node2→・・・→noden

として、マージする対象は「node1~noden」とするというやり方です。この場合、「head」が単独で存在すればリストは空ということになります。

この方法は取らずに、

node1→node2→・・・→noden

だけ、としました。「NULL」で空ということになります。

どちらがいいのか。
ここでも明確な結論はありません。直感的には『「NULL=空」はわかりやすいかな』という程度です。

3.マージ処理は再帰呼出しない

マージ処理は、再帰呼出を使わずに書きました。個人的にはこちらの方が直感的にわかりやすかった。関数呼出しのオーバーヘッドを押さえられる、かな。

4.リストは配列で確保

マージソートするリストは配列で用意しました。malloc も使っていません。ですから数に制限があります。組み込みソフトウェアではよく使う方法です。このノードは、リストをたどる以外にも配列でもアクセスできます。

リストは、191名の、ある有名な方々のお名前です。

5.ソースコード

c27.c

#include <stdio.h>
#include "node.h"

typedef struct {
	int		number;
	char	name[128];
} Person;

typedef struct {
	Node	node;
	Person	person;
} NodePerson;

char* name_of_NobelFysik[];

void print_node_person(Node* top)
{
	NodePerson* current = (NodePerson*)top;
	while (1)
	{
		Person* p = &current->person;
		printf("%3d.%s\n", p->number, p->name);

		current = (NodePerson*)current->node.next;
		if (current == (NodePerson*)top)
		{
			break;
		}
	}
}

typedef int (*NodeCompare)(Node* node1, Node* node2);
int compare_number(Node* node1, Node* node2){
	if ((node1 == NULL) && (node2 == NULL)) { return 0;}
    if (node1 == NULL) { return 1; }
    if (node2 == NULL) { return -1; }

	Person* p1 = &(((NodePerson*)node1)->person); 
	Person* p2 = &(((NodePerson*)node2)->person); 

	if (p1->number == p2->number) {
		return 0;
	}

	if (p1->number < p2->number) {
		return -1;

	} else {
		return 1;
	}
}

int compare_name(Node* node1, Node* node2){
	if ((node1 == NULL) && (node2 == NULL)) { return 0;}
    if (node1 == NULL) { return 1; }
    if (node2 == NULL) { return -1; }

	Person* p1 = &(((NodePerson*)node1)->person); 
	Person* p2 = &(((NodePerson*)node2)->person); 
	return strncmp(p1->name, p2->name, sizeof(p1->name));
}

Node* merge_node(Node* node1, Node* node2, NodeCompare cmp) {
    Node* merge_node = NULL;

	while (1) {
    	if ((node1 == NULL) && (node2 == NULL)) { break; }

    	if (cmp(node1, node2) < 0) {
			Node* sel_node = node1;
			node1 = node_unlink(sel_node);
			merge_node = node_link_before(merge_node, sel_node);
    	} else {
			Node* sel_node = node2;
			node2 = node_unlink(sel_node);
			merge_node = node_link_before(merge_node, sel_node);
    	}
	}

    return merge_node;
}

Node* mergeSort(Node* top, NodeCompare cmp) {
	/* ノードが一つだけのとき */
	if (node_is_alone(top) == 1) {
        return top;
    }

	/* 半分に分割する */
	Node* half = node_split(top);

	/* 再帰呼出 */
	/* 左半分と右半分をそれぞれマージソートする */
    Node* left  = mergeSort(top, cmp);
    Node* right = mergeSort(half, cmp);

	/* 分割したノードをマージする */
    Node* sorted = merge_node(left, right, cmp);

    return sorted;
}

int main()
{
	NodePerson NobelFysik[256] = {0};

	int i;
	for (i = 0; i < 256; i++)
	{
		node_initialize(&NobelFysik[i].node, i+1);

		if (name_of_NobelFysik[i] == NULL) 
		{
			break;
		}

		NobelFysik[i].person.number = i;
		strncpy(NobelFysik[i].person.name,  
				name_of_NobelFysik[i], 
				sizeof(NobelFysik[i].person.name));


		if (i > 0)
		{
			node_link_after(
					&NobelFysik[i-1].node, 
					&NobelFysik[i].node);
		}
	}

	print_node_person(&NobelFysik[0].node);
	printf("#########################\n");

	Node* sorted_name = 
		mergeSort(&NobelFysik[0].node, compare_name);
	printf("#########################\n");

	print_node_person(sorted_name);
	printf("#########################\n");

	Node* sorted_number = 
		mergeSort(sorted_name, compare_number);
	printf("#########################\n");

	print_node_person(sorted_number);
	printf("#########################\n");
}

char* name_of_NobelFysik[] =
{
	"Wilhelm Conrad Rontgen",
	"Hendrik Antoon Lorentz",
	"Pieter Zeeman",
	"Pierre Curie",
	"Marie Curie",
	"Antoine Henri Becquerel",
	"Lord (John William Strutt)Rayleigh",
	"Philipp Eduard Anton von Lenard",
	"Sir Joseph John Thomson",
	"Albert Abraham Michelson",
	"Gabriel Lippmann",
	"Guglielmo Marconi",
	"Carl Ferdinand Braun",
	"Johannes Diderik van der Waals",
	"Wilhelm Wien",
	"Nils Gustaf Dalen",
	"Heike Kamerlingh Onnes",
	"Max von Laue",
	"Sir William Henry Bragg",
	"William Lawrence Bragg",
	"Charles Glover Barkla",
	"Max Karl Ernst Ludwig Planck",
	"Johannes Stark",
	"Charles-Edouard Guillaume",
	"Albert Einstein",
	"Niels Henrik David Bohr",
	"Robert Andrews Millikan",
	"Karl Manne Georg Siegbahn",
	"James Franck",
	"Gustav Ludwig Hertz",
	"Jean Baptiste Perrin",
	"Arthur Holly Compton",
	"Charles Thomson Rees Wilson",
	"Owen Willans Richardson",
	"Prince Louis-Victor Pierre Raymond de Broglie",
	"Sir Chandrasekhara Venkata Raman",
	"Werner Karl Heisenberg",
	"Paul Adrien Maurice Dirac",
	"Erwin Schrodinger",
	"James Chadwick",
	"Carl David Anderson",
	"Victor Franz Hess",
	"Clinton Joseph Davisson",
	"George Paget Thomson",
	"Enrico Fermi",
	"Ernest Orlando Lawrence",
	"Otto Stern",
	"Isidor Isaac Rabi",
	"Wolfgang Pauli",
	"Percy Williams Bridgman",
	"Sir Edward Victor Appleton",
	"Patrick Maynard Stuart Blackett",
	"Hideki Yukawa",
	"Cecil Frank Powell",
	"Sir John Douglas Cockcroft",
	"Ernest Thomas Sinton Walton",
	"Felix Bloch",
	"Edward Mills Purcell",
	"Frits (Frederik) Zernike",
	"Max Born",
	"Walter Wilhelm Georg Franz Bothe",
	"Willis Eugene Lamb",
	"Polykarp Kusch",
	"William Bradford Shockley",
	"Walter Houser Brattain",
	"John Bardeen",
	"Tsung-Dao Lee",
	"Chen Ning Yang",
	"Pavel Alekseyevich Cherenkov",
	"Il´ja Mikhailovich Frank",
	"Igor Yevgenyevich Tamm",
	"Emilio Gino Segre",
	"Owen Chamberlain",
	"Donald Arthur Glaser",
	"Robert Hofstadter",
	"Rudolf Ludwig Mossbauer",
	"Lev Davidovich Landau",
	"Eugene Paul Wigner",
	"Maria Goeppert-Mayer",
	"J. Hans D. Jensen",
	"Charles Hard Townes",
	"Nicolay Gennadiyevich Basov",
	"Aleksandr Mikhailovich Prokhorov",
	"Julian Schwinger",
	"Richard P. Feynman",
	"Sin-Itiro Tomonaga",
	"Alfred Kastler",
	"Hans Albrecht Bethe",
	"Luis Walter Alvarez",
	"Murray Gell-Mann",
	"Hannes Olof Gosta Alfven",
	"Louis Eugene Felix Neel",
	"Dennis Gabor",
	"John Bardeen",
	"Leon Neil Cooper",
	"John Robert Schrieffer",
	"Leo Esaki",
	"Ivar Giaever",
	"Brian David Josephson",
	"Antony Hewish",
	"Sir Martin Ryle",
	"Aage Niels Bohr",
	"Ben Roy Mottelson",
	"Leo James Rainwater",
	"Burton Richter",
	"Samuel Chao Chung Ting",
	"Philip Warren Anderson",
	"Sir Nevill Francis Mott",
	"John Hasbrouck van Vleck",
	"Arno Allan Penzias",
	"Robert Woodrow Wilson",
	"Pyotr Leonidovich Kapitsa",
	"Steven Weinberg",
	"Sheldon Lee Glashow",
	"Abdus Salam",
	"James Watson Cronin",
	"Val Logsdon Fitch",
	"Nicolaas Bloembergen",
	"Arthur Leonard Schawlow",
	"Kai M. Siegbahn",
	"Kenneth G. Wilson",
	"Subramanyan Chandrasekhar",
	"William Alfred Fowler",
	"Carlo Rubbia",
	"Simon van der Meer",
	"Klaus von Klitzing",
	"Gerd Binnig",
	"Heinrich Rohrer",
	"Ernst Ruska",
	"K. Alexander Muller",
	"J. Georg Bednorz",
	"Leon M. Lederman",
	"Melvin Schwartz",
	"Jack Steinberger",
	"Hans G. Dehmelt",
	"Wolfgang Paul",
	"Norman F. Ramsey",
	"Richard E. Taylor",
	"Jerome I. Friedman",
	"Henry W. Kendall",
	"Pierre-Gilles de Gennes",
	"Georges Charpak",
	"Russell A. Hulse",
	"Joseph H. Taylor Jr.",
	"Clifford G. Shull",
	"Bertram N. Brockhouse",
	"Martin L. Perl",
	"Frederick Reines",
	"David M. Lee",
	"Robert C. Richardson",
	"Douglas D. Osheroff",
	"Steven Chu",
	"Claude Cohen-Tannoudji",
	"William D. Phillips",
	"Horst L. Stormer",
	"Daniel C. Tsui",
	"Robert B. Laughlin",
	"Gerardus 't Hooft",
	"Martinus J.G. Veltman",
	"Jack S. Kilby",
	"Herbert Kroemer",
	"Zhores I. Alferov",
	"Carl E. Wieman",
	"Wolfgang Ketterle",
	"Eric A. Cornell",
	"Masatoshi Koshiba",
	"Raymond Davis Jr.",
	"Riccardo Giacconi",
	"Alexei A. Abrikosov",
	"Vitaly L. Ginzburg",
	"Anthony J. Leggett",
	"David J. Gross",
	"H. David Politzer",
	"Frank Wilczek",
	"Roy J. Glauber",
	"John L. Hall",
	"Theodor W. Haensch",
	"John C. Mather",
	"George F. Smoot",
	"Albert Fert",
	"Peter Grunberg",
	"Yoichiro Nambu",
	"Makoto Kobayashi",
	"Toshihide Masakawa",
	"Charles K. Kao",
	"Willard Boyle",
	"George E. Smith",
	"Andre Geim",
	"Konstantin Novoselov",
	"Saul Perlmutter",
	"Brian Schmidt",
	"Adam Riess",
	NULL,
};

node.c

#include <stdio.h>
#include "node.h"

/************************************************/
void node_initialize(Node* node, int id) {
	node->next = node;
	node->prev = node;
	node->id   = id;
	return;
}

/************************************************/
Node* node_link_after(Node* node1, Node* node2) {
	if (node1 == NULL) {return node2;}
	if (node2 == NULL) {return node1;}

	/* node1:node1_a->node1_b-> ... ->node1_z */
	/* node2:node2_a->node2_b-> ... ->node2_z */
	Node* node1_a = node1;
	Node* node1_b = node1->next;
	Node* node2_a = node2;
	Node* node2_z = node2->prev;

	/* node1_a->node2_a-> ... ->node2_z->node1_b */
	node1_a->next = node2_a;
	node2_a->prev = node1_a;
	node2_z->next = node1_b;
	node1_b->prev = node2_z;

  	return node1;
}

/************************************************/
Node* node_link_before(Node* node1, Node* node2) {
	if (node1 == NULL) {return node2;}
	if (node2 == NULL) {return node1;}

	/* node1:node1_a->node1_b-> ... ->node1_z */
	/* node2:node2_a->node2_b-> ... ->node2_z */
	Node* node1_a = node1;
	Node* node1_z = node1->prev;
	Node* node2_a = node2;
	Node* node2_z = node2->prev;

	/* node1_z->node2_a-> ... ->node2_z->node1_a */
	node1_z->next = node2_a;
	node2_a->prev = node1_z;
	node2_z->next = node1_a;
	node1_a->prev = node2_z;

  	return node1;
}

/************************************************/
Node* node_unlink(Node* node) {
	if (node == NULL) {return node;}
	if (node_is_alone(node) == 1) {
		return NULL;
	}

	/* ... ->prev->node->next-> ... */
	Node* prev = node->prev;
	Node* next = node->next;

	/* ... ->prev->next-> ... */
	prev->next = next;
	next->prev = prev;

	/* node->node */
	node->prev = node;
	node->next = node;

  	return next;
}

/************************************************/
int node_is_empty(Node* node) {
	if (node == NULL) {
		return 1;
	} else {
		return 0;
	}
}

/************************************************/
int node_is_alone(Node* node) {
	if ((node->prev == node) && (node->next == node)) {
		return 1;
	} else {
		return 0;
	}
}

/************************************************/
void node_cut(Node* top, Node* cut) {
	if ((top == NULL) || (cut == NULL)) {return;}
	
	/* top -> ... -> end1 -> cut -> ... -> end2 */
	Node* end1 = cut->prev;
	Node* end2 = top->prev;

	/* top -> ... -> end1 */
	top->prev  = end1;
	end1->next = top;

	/* cut -> ... -> end2 */
	cut->prev  = end2;
	end2->next = cut;

  	return;
}

/************************************************/
Node* node_get_middle(Node* top) {
	if (top == NULL) {return NULL;}

	/* top:node_1->node_2->...->node_n */
    Node* slow = top;
    Node* fast = top;

	/* slow = node_1->node_2->node_3->... */
	/* fast = node_1->node_3->node_5->... */
    while (1) {
        slow = slow->next;
        fast = fast->next->next;
    	if (fast == top || fast->next == top) { break; }
    }

	/* slow = node_i (i = n/2) */
    return slow;
}

/************************************************/
Node* node_split(Node* top) {
	if (top == NULL) {return NULL;}

	/* top:node_1->node_2->...->node_n */
	/* half = node_i (i = n/2) */
	Node* half = node_get_middle(top);

	/* top  -> ... -> end1 -> half -> ... -> end2 */
	/* top  -> ... -> end1 */
	/* half -> ... -> end2 */
	node_cut(top, half);

	return half;
}

/************************************************/
void print_node(Node* top)
{
	if (top == NULL) {printf("node is empty.\n");return;}

	Node* current = top;
	while (1)
	{
		printf("%d ", current->id);

		current = current->next;
		if (current == top)
		{
			break;
		}
	}

	printf("\n");
}

node.h

#ifndef NODE_H
#define NODE_H

typedef struct node {
	struct node* next;
	struct node* prev;
	int id;
} Node;

void node_initialize(Node* node, int id);
Node* node_link_after(Node* node1, Node* node2);
Node* node_link_before(Node* node1, Node* node2);
Node* node_unlink(Node* node);
int node_is_alone(Node* node);
void node_cut(Node* top, Node* cut);
Node* node_get_middle(Node* top);
Node* node_split(Node* top);
void print_node(Node* top);

#endif

6.実行結果

  0.Wilhelm Conrad Rontgen
  1.Hendrik Antoon Lorentz
  2.Pieter Zeeman
  3.Pierre Curie
  4.Marie Curie
  5.Antoine Henri Becquerel
  6.Lord (John William Strutt)Rayleigh
  7.Philipp Eduard Anton von Lenard
  8.Sir Joseph John Thomson
  9.Albert Abraham Michelson
 10.Gabriel Lippmann
 11.Guglielmo Marconi
 12.Carl Ferdinand Braun
 13.Johannes Diderik van der Waals
 14.Wilhelm Wien
 15.Nils Gustaf Dalen
 16.Heike Kamerlingh Onnes
 17.Max von Laue
 18.Sir William Henry Bragg
 19.William Lawrence Bragg
 20.Charles Glover Barkla
 21.Max Karl Ernst Ludwig Planck
 22.Johannes Stark
 23.Charles-Edouard Guillaume
 24.Albert Einstein
 25.Niels Henrik David Bohr
 26.Robert Andrews Millikan
 27.Karl Manne Georg Siegbahn
 28.James Franck
 29.Gustav Ludwig Hertz
 30.Jean Baptiste Perrin
 31.Arthur Holly Compton
 32.Charles Thomson Rees Wilson
 33.Owen Willans Richardson
 34.Prince Louis-Victor Pierre Raymond de Broglie
 35.Sir Chandrasekhara Venkata Raman
 36.Werner Karl Heisenberg
 37.Paul Adrien Maurice Dirac
 38.Erwin Schrodinger
 39.James Chadwick
 40.Carl David Anderson
 41.Victor Franz Hess
 42.Clinton Joseph Davisson
 43.George Paget Thomson
 44.Enrico Fermi
 45.Ernest Orlando Lawrence
 46.Otto Stern
 47.Isidor Isaac Rabi
 48.Wolfgang Pauli
 49.Percy Williams Bridgman
 50.Sir Edward Victor Appleton
 51.Patrick Maynard Stuart Blackett
 52.Hideki Yukawa
 53.Cecil Frank Powell
 54.Sir John Douglas Cockcroft
 55.Ernest Thomas Sinton Walton
 56.Felix Bloch
 57.Edward Mills Purcell
 58.Frits (Frederik) Zernike
 59.Max Born
 60.Walter Wilhelm Georg Franz Bothe
 61.Willis Eugene Lamb
 62.Polykarp Kusch
 63.William Bradford Shockley
 64.Walter Houser Brattain
 65.John Bardeen
 66.Tsung-Dao Lee
 67.Chen Ning Yang
 68.Pavel Alekseyevich Cherenkov
 69.Il´ja Mikhailovich Frank
 70.Igor Yevgenyevich Tamm
 71.Emilio Gino Segre
 72.Owen Chamberlain
 73.Donald Arthur Glaser
 74.Robert Hofstadter
 75.Rudolf Ludwig Mossbauer
 76.Lev Davidovich Landau
 77.Eugene Paul Wigner
 78.Maria Goeppert-Mayer
 79.J. Hans D. Jensen
 80.Charles Hard Townes
 81.Nicolay Gennadiyevich Basov
 82.Aleksandr Mikhailovich Prokhorov
 83.Julian Schwinger
 84.Richard P. Feynman
 85.Sin-Itiro Tomonaga
 86.Alfred Kastler
 87.Hans Albrecht Bethe
 88.Luis Walter Alvarez
 89.Murray Gell-Mann
 90.Hannes Olof Gosta Alfven
 91.Louis Eugene Felix Neel
 92.Dennis Gabor
 93.John Bardeen
 94.Leon Neil Cooper
 95.John Robert Schrieffer
 96.Leo Esaki
 97.Ivar Giaever
 98.Brian David Josephson
 99.Antony Hewish
100.Sir Martin Ryle
101.Aage Niels Bohr
102.Ben Roy Mottelson
103.Leo James Rainwater
104.Burton Richter
105.Samuel Chao Chung Ting
106.Philip Warren Anderson
107.Sir Nevill Francis Mott
108.John Hasbrouck van Vleck
109.Arno Allan Penzias
110.Robert Woodrow Wilson
111.Pyotr Leonidovich Kapitsa
112.Steven Weinberg
113.Sheldon Lee Glashow
114.Abdus Salam
115.James Watson Cronin
116.Val Logsdon Fitch
117.Nicolaas Bloembergen
118.Arthur Leonard Schawlow
119.Kai M. Siegbahn
120.Kenneth G. Wilson
121.Subramanyan Chandrasekhar
122.William Alfred Fowler
123.Carlo Rubbia
124.Simon van der Meer
125.Klaus von Klitzing
126.Gerd Binnig
127.Heinrich Rohrer
128.Ernst Ruska
129.K. Alexander Muller
130.J. Georg Bednorz
131.Leon M. Lederman
132.Melvin Schwartz
133.Jack Steinberger
134.Hans G. Dehmelt
135.Wolfgang Paul
136.Norman F. Ramsey
137.Richard E. Taylor
138.Jerome I. Friedman
139.Henry W. Kendall
140.Pierre-Gilles de Gennes
141.Georges Charpak
142.Russell A. Hulse
143.Joseph H. Taylor Jr.
144.Clifford G. Shull
145.Bertram N. Brockhouse
146.Martin L. Perl
147.Frederick Reines
148.David M. Lee
149.Robert C. Richardson
150.Douglas D. Osheroff
151.Steven Chu
152.Claude Cohen-Tannoudji
153.William D. Phillips
154.Horst L. Stormer
155.Daniel C. Tsui
156.Robert B. Laughlin
157.Gerardus 't Hooft
158.Martinus J.G. Veltman
159.Jack S. Kilby
160.Herbert Kroemer
161.Zhores I. Alferov
162.Carl E. Wieman
163.Wolfgang Ketterle
164.Eric A. Cornell
165.Masatoshi Koshiba
166.Raymond Davis Jr.
167.Riccardo Giacconi
168.Alexei A. Abrikosov
169.Vitaly L. Ginzburg
170.Anthony J. Leggett
171.David J. Gross
172.H. David Politzer
173.Frank Wilczek
174.Roy J. Glauber
175.John L. Hall
176.Theodor W. Haensch
177.John C. Mather
178.George F. Smoot
179.Albert Fert
180.Peter Grunberg
181.Yoichiro Nambu
182.Makoto Kobayashi
183.Toshihide Masakawa
184.Charles K. Kao
185.Willard Boyle
186.George E. Smith
187.Andre Geim
188.Konstantin Novoselov
189.Saul Perlmutter
190.Brian Schmidt
191.Adam Riess
#########################
#########################
101.Aage Niels Bohr
114.Abdus Salam
191.Adam Riess
  9.Albert Abraham Michelson
 24.Albert Einstein
179.Albert Fert
 82.Aleksandr Mikhailovich Prokhorov
168.Alexei A. Abrikosov
 86.Alfred Kastler
187.Andre Geim
170.Anthony J. Leggett
  5.Antoine Henri Becquerel
 99.Antony Hewish
109.Arno Allan Penzias
 31.Arthur Holly Compton
118.Arthur Leonard Schawlow
102.Ben Roy Mottelson
145.Bertram N. Brockhouse
 98.Brian David Josephson
190.Brian Schmidt
104.Burton Richter
 40.Carl David Anderson
162.Carl E. Wieman
 12.Carl Ferdinand Braun
123.Carlo Rubbia
 53.Cecil Frank Powell
 20.Charles Glover Barkla
 80.Charles Hard Townes
184.Charles K. Kao
 32.Charles Thomson Rees Wilson
 23.Charles-Edouard Guillaume
 67.Chen Ning Yang
152.Claude Cohen-Tannoudji
144.Clifford G. Shull
 42.Clinton Joseph Davisson
155.Daniel C. Tsui
171.David J. Gross
148.David M. Lee
 92.Dennis Gabor
 73.Donald Arthur Glaser
150.Douglas D. Osheroff
 57.Edward Mills Purcell
 71.Emilio Gino Segre
 44.Enrico Fermi
164.Eric A. Cornell
 45.Ernest Orlando Lawrence
 55.Ernest Thomas Sinton Walton
128.Ernst Ruska
 38.Erwin Schrodinger
 77.Eugene Paul Wigner
 56.Felix Bloch
173.Frank Wilczek
147.Frederick Reines
 58.Frits (Frederik) Zernike
 10.Gabriel Lippmann
186.George E. Smith
178.George F. Smoot
 43.George Paget Thomson
141.Georges Charpak
157.Gerardus 't Hooft
126.Gerd Binnig
 11.Guglielmo Marconi
 29.Gustav Ludwig Hertz
172.H. David Politzer
 90.Hannes Olof Gosta Alfven
 87.Hans Albrecht Bethe
134.Hans G. Dehmelt
 16.Heike Kamerlingh Onnes
127.Heinrich Rohrer
  1.Hendrik Antoon Lorentz
139.Henry W. Kendall
160.Herbert Kroemer
 52.Hideki Yukawa
154.Horst L. Stormer
 70.Igor Yevgenyevich Tamm
 69.Il´ja Mikhailovich Frank
 47.Isidor Isaac Rabi
 97.Ivar Giaever
130.J. Georg Bednorz
 79.J. Hans D. Jensen
159.Jack S. Kilby
133.Jack Steinberger
 39.James Chadwick
 28.James Franck
115.James Watson Cronin
 30.Jean Baptiste Perrin
138.Jerome I. Friedman
 13.Johannes Diderik van der Waals
 22.Johannes Stark
 93.John Bardeen
 65.John Bardeen
177.John C. Mather
108.John Hasbrouck van Vleck
175.John L. Hall
 95.John Robert Schrieffer
143.Joseph H. Taylor Jr.
 83.Julian Schwinger
129.K. Alexander Muller
119.Kai M. Siegbahn
 27.Karl Manne Georg Siegbahn
120.Kenneth G. Wilson
125.Klaus von Klitzing
188.Konstantin Novoselov
 96.Leo Esaki
103.Leo James Rainwater
131.Leon M. Lederman
 94.Leon Neil Cooper
 76.Lev Davidovich Landau
  6.Lord (John William Strutt)Rayleigh
 91.Louis Eugene Felix Neel
 88.Luis Walter Alvarez
182.Makoto Kobayashi
 78.Maria Goeppert-Mayer
  4.Marie Curie
146.Martin L. Perl
158.Martinus J.G. Veltman
165.Masatoshi Koshiba
 59.Max Born
 21.Max Karl Ernst Ludwig Planck
 17.Max von Laue
132.Melvin Schwartz
 89.Murray Gell-Mann
117.Nicolaas Bloembergen
 81.Nicolay Gennadiyevich Basov
 25.Niels Henrik David Bohr
 15.Nils Gustaf Dalen
136.Norman F. Ramsey
 46.Otto Stern
 72.Owen Chamberlain
 33.Owen Willans Richardson
 51.Patrick Maynard Stuart Blackett
 37.Paul Adrien Maurice Dirac
 68.Pavel Alekseyevich Cherenkov
 49.Percy Williams Bridgman
180.Peter Grunberg
106.Philip Warren Anderson
  7.Philipp Eduard Anton von Lenard
  3.Pierre Curie
140.Pierre-Gilles de Gennes
  2.Pieter Zeeman
 62.Polykarp Kusch
 34.Prince Louis-Victor Pierre Raymond de Broglie
111.Pyotr Leonidovich Kapitsa
166.Raymond Davis Jr.
167.Riccardo Giacconi
137.Richard E. Taylor
 84.Richard P. Feynman
 26.Robert Andrews Millikan
156.Robert B. Laughlin
149.Robert C. Richardson
 74.Robert Hofstadter
110.Robert Woodrow Wilson
174.Roy J. Glauber
 75.Rudolf Ludwig Mossbauer
142.Russell A. Hulse
105.Samuel Chao Chung Ting
189.Saul Perlmutter
113.Sheldon Lee Glashow
124.Simon van der Meer
 85.Sin-Itiro Tomonaga
 35.Sir Chandrasekhara Venkata Raman
 50.Sir Edward Victor Appleton
 54.Sir John Douglas Cockcroft
  8.Sir Joseph John Thomson
100.Sir Martin Ryle
107.Sir Nevill Francis Mott
 18.Sir William Henry Bragg
151.Steven Chu
112.Steven Weinberg
121.Subramanyan Chandrasekhar
176.Theodor W. Haensch
183.Toshihide Masakawa
 66.Tsung-Dao Lee
116.Val Logsdon Fitch
 41.Victor Franz Hess
169.Vitaly L. Ginzburg
 64.Walter Houser Brattain
 60.Walter Wilhelm Georg Franz Bothe
 36.Werner Karl Heisenberg
  0.Wilhelm Conrad Rontgen
 14.Wilhelm Wien
185.Willard Boyle
122.William Alfred Fowler
 63.William Bradford Shockley
153.William D. Phillips
 19.William Lawrence Bragg
 61.Willis Eugene Lamb
163.Wolfgang Ketterle
135.Wolfgang Paul
 48.Wolfgang Pauli
181.Yoichiro Nambu
161.Zhores I. Alferov
#########################
#########################
  0.Wilhelm Conrad Rontgen
  1.Hendrik Antoon Lorentz
  2.Pieter Zeeman
  3.Pierre Curie
  4.Marie Curie
  5.Antoine Henri Becquerel
  6.Lord (John William Strutt)Rayleigh
  7.Philipp Eduard Anton von Lenard
  8.Sir Joseph John Thomson
  9.Albert Abraham Michelson
 10.Gabriel Lippmann
 11.Guglielmo Marconi
 12.Carl Ferdinand Braun
 13.Johannes Diderik van der Waals
 14.Wilhelm Wien
 15.Nils Gustaf Dalen
 16.Heike Kamerlingh Onnes
 17.Max von Laue
 18.Sir William Henry Bragg
 19.William Lawrence Bragg
 20.Charles Glover Barkla
 21.Max Karl Ernst Ludwig Planck
 22.Johannes Stark
 23.Charles-Edouard Guillaume
 24.Albert Einstein
 25.Niels Henrik David Bohr
 26.Robert Andrews Millikan
 27.Karl Manne Georg Siegbahn
 28.James Franck
 29.Gustav Ludwig Hertz
 30.Jean Baptiste Perrin
 31.Arthur Holly Compton
 32.Charles Thomson Rees Wilson
 33.Owen Willans Richardson
 34.Prince Louis-Victor Pierre Raymond de Broglie
 35.Sir Chandrasekhara Venkata Raman
 36.Werner Karl Heisenberg
 37.Paul Adrien Maurice Dirac
 38.Erwin Schrodinger
 39.James Chadwick
 40.Carl David Anderson
 41.Victor Franz Hess
 42.Clinton Joseph Davisson
 43.George Paget Thomson
 44.Enrico Fermi
 45.Ernest Orlando Lawrence
 46.Otto Stern
 47.Isidor Isaac Rabi
 48.Wolfgang Pauli
 49.Percy Williams Bridgman
 50.Sir Edward Victor Appleton
 51.Patrick Maynard Stuart Blackett
 52.Hideki Yukawa
 53.Cecil Frank Powell
 54.Sir John Douglas Cockcroft
 55.Ernest Thomas Sinton Walton
 56.Felix Bloch
 57.Edward Mills Purcell
 58.Frits (Frederik) Zernike
 59.Max Born
 60.Walter Wilhelm Georg Franz Bothe
 61.Willis Eugene Lamb
 62.Polykarp Kusch
 63.William Bradford Shockley
 64.Walter Houser Brattain
 65.John Bardeen
 66.Tsung-Dao Lee
 67.Chen Ning Yang
 68.Pavel Alekseyevich Cherenkov
 69.Il´ja Mikhailovich Frank
 70.Igor Yevgenyevich Tamm
 71.Emilio Gino Segre
 72.Owen Chamberlain
 73.Donald Arthur Glaser
 74.Robert Hofstadter
 75.Rudolf Ludwig Mossbauer
 76.Lev Davidovich Landau
 77.Eugene Paul Wigner
 78.Maria Goeppert-Mayer
 79.J. Hans D. Jensen
 80.Charles Hard Townes
 81.Nicolay Gennadiyevich Basov
 82.Aleksandr Mikhailovich Prokhorov
 83.Julian Schwinger
 84.Richard P. Feynman
 85.Sin-Itiro Tomonaga
 86.Alfred Kastler
 87.Hans Albrecht Bethe
 88.Luis Walter Alvarez
 89.Murray Gell-Mann
 90.Hannes Olof Gosta Alfven
 91.Louis Eugene Felix Neel
 92.Dennis Gabor
 93.John Bardeen
 94.Leon Neil Cooper
 95.John Robert Schrieffer
 96.Leo Esaki
 97.Ivar Giaever
 98.Brian David Josephson
 99.Antony Hewish
100.Sir Martin Ryle
101.Aage Niels Bohr
102.Ben Roy Mottelson
103.Leo James Rainwater
104.Burton Richter
105.Samuel Chao Chung Ting
106.Philip Warren Anderson
107.Sir Nevill Francis Mott
108.John Hasbrouck van Vleck
109.Arno Allan Penzias
110.Robert Woodrow Wilson
111.Pyotr Leonidovich Kapitsa
112.Steven Weinberg
113.Sheldon Lee Glashow
114.Abdus Salam
115.James Watson Cronin
116.Val Logsdon Fitch
117.Nicolaas Bloembergen
118.Arthur Leonard Schawlow
119.Kai M. Siegbahn
120.Kenneth G. Wilson
121.Subramanyan Chandrasekhar
122.William Alfred Fowler
123.Carlo Rubbia
124.Simon van der Meer
125.Klaus von Klitzing
126.Gerd Binnig
127.Heinrich Rohrer
128.Ernst Ruska
129.K. Alexander Muller
130.J. Georg Bednorz
131.Leon M. Lederman
132.Melvin Schwartz
133.Jack Steinberger
134.Hans G. Dehmelt
135.Wolfgang Paul
136.Norman F. Ramsey
137.Richard E. Taylor
138.Jerome I. Friedman
139.Henry W. Kendall
140.Pierre-Gilles de Gennes
141.Georges Charpak
142.Russell A. Hulse
143.Joseph H. Taylor Jr.
144.Clifford G. Shull
145.Bertram N. Brockhouse
146.Martin L. Perl
147.Frederick Reines
148.David M. Lee
149.Robert C. Richardson
150.Douglas D. Osheroff
151.Steven Chu
152.Claude Cohen-Tannoudji
153.William D. Phillips
154.Horst L. Stormer
155.Daniel C. Tsui
156.Robert B. Laughlin
157.Gerardus 't Hooft
158.Martinus J.G. Veltman
159.Jack S. Kilby
160.Herbert Kroemer
161.Zhores I. Alferov
162.Carl E. Wieman
163.Wolfgang Ketterle
164.Eric A. Cornell
165.Masatoshi Koshiba
166.Raymond Davis Jr.
167.Riccardo Giacconi
168.Alexei A. Abrikosov
169.Vitaly L. Ginzburg
170.Anthony J. Leggett
171.David J. Gross
172.H. David Politzer
173.Frank Wilczek
174.Roy J. Glauber
175.John L. Hall
176.Theodor W. Haensch
177.John C. Mather
178.George F. Smoot
179.Albert Fert
180.Peter Grunberg
181.Yoichiro Nambu
182.Makoto Kobayashi
183.Toshihide Masakawa
184.Charles K. Kao
185.Willard Boyle
186.George E. Smith
187.Andre Geim
188.Konstantin Novoselov
189.Saul Perlmutter
190.Brian Schmidt
191.Adam Riess
#########################

この記事が気に入ったらサポートをしてみませんか?