// 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;
}
}
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; //새로 비교되는 대상
//다음것이 작은 경우...위치를 바꾸자
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;
}
}
}
 |
평일주간[100%환급과정] (8/04)C#4.0,WinForm,ADO.NET (8/04)자바기초JDBC,Servlet/JSP까지 (8/04)Spring,MyBatis,Hibernate실무과정 (8/11)PL/SQL,ORACLE HINT,TUNING (8/11)SQL기초에서 Schema Object까지 (8/11)안드로이드개발자과정 (8/11)채용예정교육 평일야간[개인80%환급] (8/04)웹퍼블리싱 마스터 (8/05)JSP,jQUERY,Spring,MyBatis (8/06)Spring3.X, MyBatis, Hibernate (8/08)C#,Network,ADO.NET,ASP.NET (8/11)SQL기초에서실무까지 (8/11)안드로이드개발자과정 (8/28)자바JSP,jQuery,Spring,MyBatis 주말주간[개인80%환급] (8/02)Spring3.X, MyBatis, Hibernate (8/02)C#,ASP.NET마스터 (8/02)웹퍼블리싱 마스터 (8/02)SQL초보에서 Schema Object까지 (8/09)SQL기초에서실무까지 (8/09)안드로이드개발자과정 (8/09)자바JSP,Ajax,jQuery,Spring,MyBatis (8/23)JAVA,Network&WEB&Framework 주말야간[개인80%환급](18:30~22:20) (8/02)JAVA,Network&WEB&Framework (8/09)SQL기초에서실무까지
|