반응형
정렬을 해봅시다.
버블정렬, 선택정렬, 선택정렬으로 알려진 버블정렬
'
개인적으로 반지의 제왕에서 명장면 중 하나라 생각하는 펠렌노르 전투입니다.
잘 정렬 되어있는 로한의 기마부대가 보이십니까!!!??
저희도 정렬한번 해보러 가보시죠
버블정렬 ( Bubble Sort )
버블정렬에서 오름차순 정렬은
첫 인덱스를 기준으로 하여서 다음 인덱스와 비교하여 다음 인덱스가 숫자가 적을 경우 바로 교환을 실시합니다. 그렇지 않다면 첫 기준 인덱스가 +1 되어 다시 서로 인접한 두 항을 계속해서 비교하는 방식입니다.
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 | #include<stdio.h> int main(void){ //버블정렬 int nList[5] = { 90, 50, 119, 60, 41 }; int num_case = 0; for (int i = 0; i < 4; i++){ for (int j = 0; j < 4; ++j){ if (nList[j] > nList[j + 1]){ num_case = nList[j]; nList[j] = nList[j+1]; nList[j + 1] = num_case; } } printf("%d번째:", i + 1); for (int z = 0; z < 5; z++){ printf("%d ", nList[z]); } putchar('\n'); } for (int z = 0; z < 5; z++){ printf("%d ", nList[z]); } putchar('\n'); return 0; } | cs |
선택정렬 ( Select Sort )
선택정렬의 오름차순은
첫 기준 인덱스를 잡고 인덱스의 끝까지 비교하여서 제일 작은 숫자와 교환을 하는 방식입니다.
버블 정렬과 다른점은 처음 선택한 인덱스를 기준으로 잡고 전체를 검색하고 난 뒤에 교환을 할 것인지 하지 않을 것인지 결정하게 됩니다.
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 | #include<stdio.h> int main(void){ int nList[5] = { 90, 50, 119, 60, 41 }; int nMin_Index = 0; int nTmp = 0; for (int i = 0; i < 4; i++){ nMin_Index = i; for (int j = i + 1; j < 5; j++){ if (nList[nMin_Index] > nList[j]){ nMin_Index = j; // 최소값을 인덱스만 저장한다. } } if(nMin_Index != i){ nTmp = nList[i]; nList[i] = nList[nMin_Index]; nList[nMin_Index] = nTmp; } printf("%d번째:", i + 1); for (int z = 0; z < 5; z++){ printf("%d ", nList[z]); } puts(""); } puts("버블정렬 완료"); return 0; } | cs |
선택정렬로 알려진 버블정렬
선택 정렬은 가장 앞의 숫자 부터 비교해서 제일 작은 숫자를 기억하여 최종적으로 교환합니다.
선택 정렬로 알려진 버블정렬은 첫 인덱스부터 비교를 하는데, 가장 작은 숫자가 나타나면 바로 교환한다. 그리곤 계속해서 비교합니다.
그에 비하여서 선택정렬은 마지막 인덱스까지 비교 한 후에 교환을 진행합니다.
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 | #include<stdio.h> int main(void){ int nList[5] = { 90, 50, 119, 60, 41 }; int num_case = 0; for (int i = 0; i < 4; ++i){ for (int j = i+1; j < 5; ++j){ if (nList[i] > nList[j]){ // 비교했을때 숫자가 작을경우는 넘어긴다 num_case = nList[i]; nList[i] = nList[j]; nList[j] = num_case; } } printf("%d번째: ",i+1); for (int i = 0; i < 5; i++){ printf("%d ", nList[i]); } putchar('\n'); } for (int i = 0; i < 5; i++){ printf("%d ", nList[i]); } putchar('\n'); return 0; } | cs |
반응형
'훈, IT 공부 > C,C++,MFC' 카테고리의 다른 글
헝가리안 표기법이란 (0) | 2018.01.04 |
---|---|
ASLR이란? 왜 계속 주소가 바뀌는건가요!!! (메모리변조) (0) | 2018.01.03 |
[실습코딩] 지그재그 숫자 찍어내기 (0) | 2017.12.30 |
[실습코딩] 피라미드 별찍기 (0) | 2017.12.29 |
[기초바로잡기]형승격(type promotion) (0) | 2017.12.27 |
댓글