Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프렌즈4블록java
- 카카오코딩테스트
- 백준
- 개발상식
- 문자열포맷
- 객체프로그래밍
- 자료구조 트리
- 카카오1차
- 카카오코테
- 프렌즈4블록
- 프로그래머스
- java method
- 백준 1924번 java
- Java heap
- 객체프로그래밍이란
- 백준 1000번 java
- 코테준비
- 힙정렬자바
- 백준 1000번
- 자바
- java
- 코딩테스트기출
- 카카오기출
- 자바문자열
- 공부정리
- 자료구조힙
- heap
- 알고리즘
- 백준 1924번
- heap정렬
Archives
- Today
- Total
일단 시작해보는 블로그
[알고리즘_개념] 힙 정렬, Heap Sort 본문
힙정렬 알고리즘은
입력받은 숫자를 최대 혹은 최소 힙 구조로 만들고 현재 값 중에 가장 큰값 혹은 작은 값을 루트로부터 추출하여 큰값부터 차례대로 뽑아 정렬문제를 해결하는 알고리즘이다.
아래 동영상이 도움이 많이 됐다아ㅏ.!!!
LOGIC
1. 배열에 담기
2. max-heapify
3. 1번노드와 마지막 노드 exchange
4. 마지막 노드를 arraylist에 따로 담기, heap크기 = heap크기 -1
package data_structure;
import java.util.ArrayList;
// max heap!
public class HeapSort {
static ArrayList<Integer> sortArr = new ArrayList<>();
static int[] swap(int[] a, int m, int n){
int tmp = 0;
tmp = a[m];
a[m] = a[n];
a[n] = tmp;
return a;
}
static int[] maxHeapify(int[] a){
int start = a.length/2;
for(int i=start; i>=1; i--){
//System.out.println(2*i + " " + (2*i+1));
if(2*i < a.length && a[i] <= a[2*i]) { a = swap(a, i, 2*i); }
if((2*i)+1 < a.length && a[i] <= a[(2*i)+1]) {
a = swap(a, i, (2*i)+1);
}
}
return a;
}
static int[] exchange_1_n(int[] a){
int arrLength = a.length-1;
a = swap(a, 1, arrLength);
sortArr.add(a[arrLength]);
int[] noneMaxHeap = new int[arrLength];
for(int i=1; i<arrLength; i++){
noneMaxHeap[i] = a[i];
}
return noneMaxHeap;
}
public static void main(String[] args) {
int[] a = {0, 16, 14, 10, 8, 7, 9, 3, 2, 4, 1};
for(int ai : a){
System.out.print(ai + " ");
}
System.out.println();
int end = a.length-1;
for(int i=0; i<end; i++){
a = maxHeapify(a);
a = exchange_1_n(a);
}
System.out.println(sortArr);
}
}
[REFERENCE]
https://www.youtube.com/watch?v=ehNVf2Bcm2Q
https://www.youtube.com/watch?v=S42s_ANn4c4
'CS > 자료구조' 카테고리의 다른 글
[자료구조] 이진검색트리, Binary Search Tree (0) | 2019.09.07 |
---|---|
[자료구조] [Array, ArrayList] VS [LinkedList] (0) | 2019.08.27 |
[자료구조] 힙, Heap (0) | 2019.08.25 |
[자료구조] 트리, Tree (0) | 2019.08.25 |
[자료구조] 해시 Hash, 해시맵 HashMap (0) | 2019.08.21 |
Comments