일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- JAVA #언어 #프로그래밍 #코딩 #static #정적함수 #정적변수 #클래스
- 파이썬
- 1달살기
- 계획
- 영국
- 경험
- 인프라
- 유럽
- ip
- 일정
- 겨울
- RabbitMQ
- 내심정
- 배낭여행
- 예약
- 메시지 큐
- 추억
- 여행 #
- IT
- 준비
- JAVA #언어 #프로그래밍 #IT #개발 #코딩
- 여행
- 유럽여행
- #DB#SQLD#자격증
- 실비용
- 이탈리아
- JAVA #객체지향 #프로그래밍 #언어 #IT #기초
- 서버
- 리눅스
- 샐러리
- Today
- Total
YoonWould!!
[정렬]간단히 정리하는 선택, 버블, 삽입 정렬 본문
1. Selection Sort
1) 개념
각 루프마다
- 최대의 원소를 찾는다.
- 최대의 원소와 맨 오른쪽 원소를 교환한다.
- 맨 오른쪽 원소를 제외한다.
하나의 원소만 남을 때 까지 위의 루프를 반복한다.
[출처: 권오흠, 영리한 프로그래밍을 위한 알고리즘 강좌]
2) Pseudocode
selectionSort(A[ ], n){ ▷배열 A[1...n]을 정렬한다.
for last ← n downto 2 { -------------------------------①
A[1...last] 중 가장 큰 수 A[k]를 찾는다 -----------------------②
A[k] ↔ A[last] ▷ A[k]와 A[last]의 값을 교환 -------------------------③
}
}
3) 수행시간
①의 for 루프는 n-1번 반복
②에서 가장 큰 수를 찾기 위한 비교횟수: n-1, n-2, ..., 2, 1
③의 교환은 상수시간 작업
4) 시간복잡도
5) 내가 짠 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include<stdio.h> int main(void){ int i,j,min,index, temp; int array[10] = {1,10,5,8,7,6,4,3,2,9}; for(i=0;i<10;i++){ min = 99999; for(j=i;j<10;j++){ if(min > array[j]){ min =array[j]; index =j; } } temp = array[i]; array[i] = array[index]; array[index] = temp; } for(i=0;i<10;i++){ printf("%d ",array[i]); } return 0; } | cs |
2. Bubble Sort
1) 개념
두 인접한 원소를 검사하여 정렬하는 방법이다. 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름이다.
다른 숫자와 비교하여 제일 큰 수를 뒤로 보내는 작업은 Selection Sort와 비슷하다.
2) Pseudocode
bubbleSort(A[ ], n) { ▷배열 A[1...n]을 정렬한다.
for last ← n downto 2 { -------------------------------①
for i ← 1 to last-1 -----------------------②
if(A[i]>A[i+1]) then A[i] ↔ A[i+1] ▷ 교환 -------------------------③
}
}
3) 수행시간
①의 for 루프는 n-1번 반복
②의 for 루프는 각각 n-1, n-2, ..., 2, 1번 반복
③의 교환은 상수시간 작업
4) 시간복잡도
5) 내가 짠 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | //옆에 있는 값과 비교해서 더 작은 값을 앞으로 보내면 어떨까? //비교해주는 집합을 줄여줌으로서 구해진다. #include<stdio.h> int main(){ int i,j, temp; int array[10] = {1,10,5,8,7,6,4,3,2,9}; for(i=0;i<10;i++){ for(j=0;j<9-i;j++){ if(array[j] > array[j+1]){ temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } for(i=0;i<10;i++){ printf("%d ",array[i]); } return 0; } | cs |
3. Insertion Sort (삽입 정렬)
1) 개념
자료 배열의 모든 요소를 앞에서 부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다.
2) Pseudocode
insertionSort(A[ ], n){ ▷배열 A[1...n]을 정렬한다.
for i ← 1 to { -------------------------------①
A[1...i]의 적당한 자리에 A[i]를 삽입한다. -------------------②
}
}
3) 수행시간
①의 for 루프는 n-1번 반복
②의 삽입은 최악의 경우 i-1번 비교
4) 시간복잡도 - 최악의 경우
5) 내가 짠 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | //항상 왼쪽은 정렬이 되어 있기 때문에 // 멈출곳을 알고 있기 때문에 더 효율적인 코드다. #include<stdio.h> int main(){ int i,j, temp; int array[10] = {1,10,5,8,7,6,4,3,2,9}; for(i=0;i<9;i++){ j=i; // 현재의 원소를 선택해서 적절한 위치에 넣는다. while(array[j] > array[j+1]){ temp = array[j]; array[j] = array[j+1]; array[j+1]= temp; j--; } } for(i=0;i<10;i++){ printf("%d ",array[i]); } return 0; } | cs |
'<IT 용어>' 카테고리의 다른 글
[시험 대비] 데이터통신 & 네트워크 (0) | 2018.09.26 |
---|---|
[시험 대비]운영체제 (0) | 2018.09.16 |
뛰어난 SW개발자를 채용하는 방법 (0) | 2018.09.09 |
[전산 시험 대비 준비] 데이터베이스 (0) | 2018.08.21 |
[JAVA]JAVA 정리 요약(+ DB) (0) | 2018.06.18 |