반응형

선택정렬이란?

주어진 원소 중에서 가장 작은 킷값을 갖는 원소를 선택하여 차례대로 나열하는 정렬방식. 그러니까

처음부터 끝까지 비교해가면서 가장 작은(큰) 수를 찾아 순서대로 만들어 간다.

 

선택정렬의 특징

1. 정렬할 원소의 개수가 일정하다면, 언제나 동일한 수행시간이 걸린다.

2. 안정적이지 않은 정렬이다.(삽입정렬과 반대)

ex) 1 5 30 30 25

-> 1 5 30 30 25 

-> 1 5 30 30 25

-> 1 5 25 30 30

-> 1 5 25 30 30 

정렬이 끝난 시점에 30 30이 30 30으로 순서가 바뀌므로 안정적이지 않은 정렬임.

3. 제자리 정렬이다.

#include<stdio.h>
SelectionSort(int A[],int n){
	int Min, temp, i, j;
	for(i= 0; i<10; i++){
		Min = i; //최솟값 설정   
		for(j=0; j<10; j++){
			if(A[j]<A[Min])
				Min = j; //새로운 최솟값  
		}
		if(Min =! i){ 
		//만약 Min이 i가 아닐때 A[i]와 A[Min] 교환  
			temp = A[i];
			A[i] = A[Min];
			A[Min] = temp;
		}
        printf("%d단계를 출력 :", i);
		for(int k=0; k<n; k++){ //정렬되는 과정 출력 
			printf("%d ", A[k]);
		}
		printf("\n");
	}
}
int main(){
	int A[10];
	printf("입력하세요:");
	for(int i=0; i<10; i++){
		scanf("%d",&A[i]);
	}
	SelectionSort(A, 10);
	for(int i=0; i<10; i++){
		printf("%d",A[i]);
	}
}
/*
입력하세요 :1 3 2 5 4 7 6 0 8 9
0 1 2 3 4 5 6 7 8 9
--------------------------------
Process exited after 1.416 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

아마 버블정렬이랑 함께 내가 가장 많이 쓰는 정렬이지 않을까 싶음. 이유는 나도 모르겠음. 근데 C++과 파이썬 그리고 자바 등등으로 넘어가면서 정렬하는 그런 기본적인 코드에 대한 생각을 안한지는 진짜 오래된듯. 그래서 지금 이렇게 보니까 되게 새로움. 그렇다고 다시 공부하겠다거나 그런 생각은 들지 않을 거라 생각하긴 했는데 진짜 신기하기만 하고 그때 열심히 공부했던 게 떠올라서 별로..라는 생각이 드네^^

반응형

'2019~2020 > 자료구조' 카테고리의 다른 글

삽입정렬이란  (0) 2019.09.16
버블정렬  (0) 2019.09.11
최댓값 찾기 알고리즘  (0) 2019.09.03
bfs-dfs  (0) 2019.08.26
행렬을 이용한 BFS (c)  (0) 2019.08.20

+ Recent posts