정렬, 힙정렬
Dec 11, 2018 조회수 96
public class Main {
	private int index;
	private int heap[];
	public Main(int N) {
		index = 0;
		this.heap = new int[N + 1];
	}
	private void swap(int i, int j) {
		int temp = heap[i];
		heap[i] = heap[j];
		heap[j] = temp;
	}
	public void insert(int a) {
		int i = ++index;
		heap[i] = a;
		while (i != 1 && heap[i] > heap[i / 2]) {
			swap(i, i / 2);
			i = i / 2;
		}
	}
	public int delete() {
		int result = heap[1];
		heap[1] = heap[index];
		heap[index] = 0;
		index--;
		int i = 1;
		int c;
		while (true) {
			c = i * 2;
			if (c < index && heap[c] < heap[c + 1]) {
				c++;
			}
			if (c <= index && heap[i] < heap[c]) {
				swap(i, c);
				i = c;
			} else {
				break;
			}
		}
		return result;
	}
	public static void main(String[] args) {
		int N = 100;
		Main M = new Main(N);
		for (int i = 0; i < N; i++) {
			M.insert((int) (Math.random() * N));
		}
		for (int i = 0; i < N; i++) {
			System.out.println(M.delete());
		}
	}
}
<br/>
<br/>
'정렬, 힙정렬' 관련된 다른글
 
                이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.