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
반응형