차곡차곡 성 쌓기
article thumbnail
퀵 정렬 (Quick Sort) - Java
CS/알고리즘 2023. 8. 17. 02:42

알고리즘 퀵 정렬은 기준값(pivot)을 선정해 해당 값도가 작은 데이터와 큰 데이터로 분류하는 것을 반복해 정렬하는 알고리즘이다. 평균적인 시간 복잡도는 O(nlogn)으로 다른 O(nlogn)의 알고리즘 중 가장 빠르다고 평가 된다. 구체적인 내용 기준점을 정하고 기준점을 기준으로 작은 것은 왼쪽으로 큰 것은 오른쪽으로 이동 시키며 정렬을 진행 한다. 이때 기준점이 되는 레코드는 한 번 정렬이 완료되면 더 이상 자리가 바뀌지 않는다. partition 함수를 통해 피봇을 기준으로 왼쪽, 오른쪽을 나누게 된다. 최종적으로 피봇의 위치는 low가 higt보다 커지는 순간으로 결정된다. 이렇게 피봇을 기준으로 한 번 정렬된 리스트는 다시 왼쪽, 오르쪽 리스트로 쪼개져 partition 함수를 호출하며 리스..

article thumbnail
삽입 정렬 - Java
CS/알고리즘 2023. 8. 16. 02:56

알고리즘 손 안의 카드 정렬을 하는 것과 유사하다. 기존의 정렬된 카드 사이의 올바른 자리를 찾아 삽입! 왼쪽 리스트에 정렬이 완료된 요소를 1개, 2개 점점 개수를 늘려가면서 정렬이 완료된다. 구체적인 알고리즘 1. 인덱스 1부터 시작한다. 2. 현재 삽입될 요소인 i번째 요소를 key 변수에 복사 3. i-1번째 부터 역순으로 조사 4. j가 0보다 작아지거나 key값보다 정렬된 배열에 있는 값이 크면 5. j번째는 j+1번째로 이동한다. 6. j를 하나 감소한다. 7. j번째 정수가 key보다 작으므로 j+1번째가 key값이 들어갈 위치이다. 코드 // 정렬 - 삽입 정렬 int i,j; for(i= 1; i=0&&num..

article thumbnail
버블 정렬 - Java
CS/알고리즘 2023. 8. 14. 21:50

알고리즘 개념 인접한 2개의 레코드를 비교하며 정렬 인접한 2개의 레코드를 비교하여 크기가 순서대로 되어있지 않으면 서로 교환 1회전이 돌때 마다 정렬이 완료된 레코드가 가장 오른쪽에 1개씩 추가됨 코드 - Java // buble sort for(int i = N-1; i >=0 ; i--) { int chage = 0; for(int j=0; j arr[j+1]) { chage++; int tem = arr[j]; arr[j] = arr[j+1]; arr[j+1]= tem; } } if(chage == 0) break; } 시간 복잡도 분석 비교 횟수 (n-1) + (n-2) .. 2 + 1 = (n * (n+1)) / 2 시간 복잡도: O(n^2) 최선, 평균, 최악 모두 같다. 이동 횟수 최악의 ..

article thumbnail
선택 정렬 - Java
CS/알고리즘 2023. 8. 14. 21:47

선택 정렬 개념 제자리 정렬 (in-place sorting)이다. 입력 배열 외에는 추가 메모리를 요구하지 않는 정렬이다. 정렬된 해당 요소가 넣어질 위치가 정해져 있다. 자료 이동 횟수가 미리 결정된다. → n-2번 구체적인 설명 선택 정렬이란 첫 번째 위치부터 차례대로 정렬이 안된 요소 중 가장 작은 것(큰 것)을 선택하여 위치를 교환하여 점점 정렬을 완료해나가는 기법이다. 첫번째 루프일 때 첫번 째 요소를 두번 째 요소부터 마지막 요소까지 비교하여 가장 작은 값을 찾으면 해당 요소와 교환한다. 두번 째 루프일 때 두번 째 자료를 세번 째 요소 부터 마지막 요소까지 비교하여 가장 작은 요소를 찾으면 해당 요소와 교환한다. 이렇게 n-1 요소까지 반복한다. 시간 복잡도 비교 횟수 (n-1) + (n-..