CS/알고리즘
배열 뒤집기 시간 측정
lms0806
2023. 3. 14. 14:16
728x90
반응형
C++하시던 분이 JAVA를 시작하게 되면서 C++에 있는 reverse()에 대해 여쭤봤었습니다.
그러면서 갑자기 궁금한 내용이 있어서 포스팅을 하게 되었습니다.
JAVA에는 뒤집기 함수가 없어 직접 배열을 만들어 뒤집거나 하는 방식으로 진행해야 합니다.
(lower_bound, upper_bound도 없어..)
JAVA의 배열 뒤집기 시간측정을 해보겠습니다.
n은 10,000,000으로 측정해봤습니다.
배열
long beforeTime = System.currentTimeMillis();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = i;
}
int[] arr1 = new int[n];
for(int i = 0; i < n; i++) {
arr1[i] = arr[arr.length - 1 - i];
}
arr = arr1.clone();
long afterTime = System.currentTimeMillis();
System.out.println("소요시간 : " + (afterTime - beforeTime) / 1000 + "." + (afterTime - beforeTime) % 1000);
소요시간 : 0.48
리스트
long beforeTime = System.currentTimeMillis();
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0; i < n; i++) {
list.add(i);
}
Collections.reverse(list);
long afterTime = System.currentTimeMillis();
System.out.print("소요시간 : " + (afterTime - beforeTime) / 1000 + "." + (afterTime - beforeTime) % 1000);
소요시간 : 0.289
class쓴 리스트
long beforeTime = System.currentTimeMillis();
ArrayList<Node> list = new ArrayList<>();
for(int i = 0; i < n; i++) {
list.add(new Node(i));
}
Collections.sort(list);
long afterTime = System.currentTimeMillis();
System.out.print("소요시간 : " + (afterTime - beforeTime) / 1000 + "." + (afterTime - beforeTime) % 1000);
class Node implements Comparable<Node>{
int to;
public Node(int to) {
this.to = to;
}
@Override
public int compareTo(Node o) {
return o.to - this.to;
}
}
소요시간 : 0.298
링크드리스트
long beforeTime = System.currentTimeMillis();
LinkedList<Integer> list = new LinkedList<>();
for(int i = 0; i < n; i++) {
list.add(i);
}
Collections.reverse(list);
long afterTime = System.currentTimeMillis();
System.out.print("소요시간 : " + (afterTime - beforeTime) / 1000 + "." + (afterTime - beforeTime) % 1000);
소요시간 : 1.806
우선순위 큐
long beforeTime = System.currentTimeMillis();
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
for(int i = 0; i < n; i++) {
pq.add(i);
}
long afterTime = System.currentTimeMillis();
System.out.print("소요시간 : " + (afterTime - beforeTime) / 1000 + "." + (afterTime - beforeTime) % 1000);
소요시간 : 1.577
728x90
반응형