1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | public class Sort extends DoublyLinkedList { public static DoublyLinkedList mergeSort(DoublyLinkedList arr) { DoublyLinkedList DLL_arr1= new DoublyLinkedList(); DoublyLinkedList DLL_arr2= new DoublyLinkedList(); int N = arr.size(); int k = arr.size()/2; if(N>2) { for(int i = 0 ; i<k ;i++) { DLL_arr1.addLast(arr.removeFirst()); } for(int i = 0 ; i<N-k ;i++) { DLL_arr2.addLast(arr.removeFirst()); } DLL_arr1=mergeSort(DLL_arr1); //DLL_arr1.head=mergeSort(DLL_arr1).head; DLL_arr2=mergeSort(DLL_arr2); //DLL_arr2.head=mergeSort(DLL_arr2).head; } else { for(int i = 0 ; i<k ;i++) { DLL_arr1.addLast(arr.removeFirst()); } for(int i = 0 ; i<N-k ;i++) { DLL_arr2.addLast(arr.removeFirst()); } } return merge(DLL_arr1,DLL_arr2); } private static DoublyLinkedList merge(DoublyLinkedList DLL_arr1,DoublyLinkedList DLL_arr2) { DoublyLinkedList returnList= new DoublyLinkedList(); while((DLL_arr1.size()>0)&&(DLL_arr2.size()>0)) { if(DLL_arr1.head.data<DLL_arr2.head.data) { returnList.addLast(DLL_arr1.removeFirst()); } else { returnList.addLast(DLL_arr2.removeFirst()); } } if(DLL_arr1.size()>0) { while(DLL_arr1.size()!=0) { returnList.addLast(DLL_arr1.removeFirst()); } } else if(DLL_arr2.size()>0) { while(DLL_arr2.size()!=0) { returnList.addLast(DLL_arr2.removeFirst()); } } //System.out.println(returnList.head.data); //System.out.println(returnList.head.next.data); return returnList; } public static void main(String[] args) { Sort S= new Sort(); DoublyLinkedList DLL= new DoublyLinkedList(); DLL.addLast(6); DLL.addLast(10); DLL.addLast(7); DLL.addLast(5); DLL.addLast(20); DLL.addLast(8); DLL=mergeSort(DLL); while(DLL.size()!=0) System.out.println(DLL.removeFirst()); } } | cs |
이중 연결리스트로 병합 정렬 구현중인데 mergeSort 부분에서 다시 mergeSort 호출하는 부분에서 처음 짯을때 head값으로 넘겨받으려고 했는데 저렇게 하니까 동작은하는데 병합 정렬을 못해버려서 한참 해맷습니다! 이거 해결할려고 3시간 걸렸는데 왜 head값으로 넘겨주면 작동을 안하는건가요?
댓글 0