// InsertionSort.java
class SNode {
public String key;
public Object obj;
public SNode next;
public SNode (String key) {this(key, null, null);}
public SNode (String key, Object obj) {this(key, obj, null);}
public SNode (String key, Object obj, SNode next) {
this.key = key;this.obj = obj;this.next = next;
}
public int compareTo(SNode node) {
if (key.compareTo(node.key)<0) return -1;
else if (key.compareTo(node.key)==0) return 0;
else return 1;
}
}
public String key;
public Object obj;
public SNode next;
public SNode (String key) {this(key, null, null);}
public SNode (String key, Object obj) {this(key, obj, null);}
public SNode (String key, Object obj, SNode next) {
this.key = key;this.obj = obj;this.next = next;
}
public int compareTo(SNode node) {
if (key.compareTo(node.key)<0) return -1;
else if (key.compareTo(node.key)==0) return 0;
else return 1;
}
}
class Person {
String name;
String tel;
Person(String name, String tel) {
this.name = name;
this.tel = tel;
}
}
public class InsertionSort {
static SNode insertionSort(SNode head) {
SNode end;
SNode q; //삽입되는 카드 1장....(새로 위치를 찾을 데이터를 가리킴)
SNode prev; //삽입되는 위치의 앞, 뒤 포인터
end = head;
while(end.next!= null) {
q = end.next; //새로 비교되는 대상
String name;
String tel;
Person(String name, String tel) {
this.name = name;
this.tel = tel;
}
}
public class InsertionSort {
static SNode insertionSort(SNode head) {
SNode end;
SNode q; //삽입되는 카드 1장....(새로 위치를 찾을 데이터를 가리킴)
SNode prev; //삽입되는 위치의 앞, 뒤 포인터
end = head;
while(end.next!= null) {
q = end.next; //새로 비교되는 대상
//다음것이 작은 경우...위치를 바꾸자
if (q.compareTo(head)<0){ //새로 비교되는 대상이 head 보다 작은 경우
//head와 다음 노드의 순서를 바꾼다...
end.next = q.next;
q.next = head;
head = q;
}
else {
prev = head;
//새로 추가되는 q가 큰 동안에 수행
//즉 삽입될 위치를 찾음....
while(q.compareTo(prev.next) > 0) {
prev = prev.next;
}
//마지막가지 비교한 결과 자기(q)보다 큰것이 없는 경우
//q를 마지막으로
if (q == prev.next) end = q;
else { //삽입될 위치를 찾은 경우 prev 뒤에 q를 삽입
//q가 가운데 들어가므로 q.next를 보관
end.next = q.next; q.next = prev.next; prev.next = q;
}
} //end of if
}//end of while
return head;
}
public static void main(String[] args) {
SNode node1 = new SNode("바길동", new Person("바길동","666-6666"), null);
SNode node2 = new SNode("라길동", new Person("라길동","444-4444"), null);
SNode node3 = new SNode("마길동", new Person("마길동","555-5555"), null);
SNode node4 = new SNode("가길동", new Person("가길동","111-1111"), null);
SNode node5 = new SNode("나길동", new Person("나길동","222-2222"), null);
SNode node6 = new SNode("다길동", new Person("다길동","333-3333"), null);
node1.next = node2; node2.next = node3;
node3.next = node4; node4.next = node5;
node5.next = node6;
SNode head = insertionSort(node1);
while(head != null) {
System.out.println(((Person)(head.obj)).name + "::" + ((Person)(head.obj)).tel);
head = head.next;
}
}
}
while(head != null) {
System.out.println(((Person)(head.obj)).name + "::" + ((Person)(head.obj)).tel);
head = head.next;
}
}
}
댓글 없음:
댓글 쓰기