C자료구조 선택정렬 알고리즘(Selection Sort)

c언어로 만든 선택정렬 알고리즘(Selection Sort).

-특정한 일을 수행하기 위한 명령의 유한집합.

-만족 조건.

1.입력: 입력하는 데이터가 하나이상이 있어야한다.

2.출력: 적어도 하나의 결과가 있어야한다

3.명확성: 명령이 명확해야한다.

4.유한성: 반드시 종료되어야한다.

5.유효성: 반드시 실행가능해야한다.

선택정렬 알고리즘

-최소정수를 찾을 수 있어야한다.

-최소정수와 다른값을 교환한다.

-O(n^2)

swap(말 그대로 바꿔주는 함수)

swap 함수.

void SWAP(int *x, int *y)

{

int z=*x; //z를 선언하고 z에 x가 가르키는 주소의 내용을 넣는다.

*x=*y; // x의 주소에 y가 가르키는 주소의 내용을 넣는다.

*y=z; //y의 주소에 z의 내용을 넣는다.

}

 

swap 매크로.

#define SWAP(x,y,z) ((z)=(x), (x)=(y),(y)=(z))

 

선택정렬.(코드 및 분석)

주어진 리스트 안의 숫자를 작은수에서 큰수로 정렬하는 알고리즘입니다.

이 알고리즘은 앞부분부터 차례대로 정렬합니다.

ex. list[5]={30,20,15,11,24};

이걸로 예시를 하겠습니다.

그전에 먼저 C언어 코드입니다. 

void sort (int list[], int n){ //sort함수
	int i, j, min, temp;
	for(i=0; i<n-1; i++){
		min=i;
		for(j=i+1;j<n;j++)
			if(list[j]<list[min])//비교
				min=j; //조건에 맞면 교체
		SWAP(list[i],list[min],temp); //위치 교체
	}
}

그림그리기 귀찮아서 글로 설명합니다.

 

위의 list[5]={30,20,15,11,24};

1. min=i <--0

2. for문이라 j<n번 반복 (4번까지)

3. list[j]와 list[0]비교.-참

4. 교체. -11-20-15-30-24

5. min=i<--1

6. for문반복 (3번까지)

7.list[j]와 list[1]비교.-참

8.교체 -11-15-20-30-24

9. min=i <<---2

10. for문 반복 (2번까지)

11. list[j]와 list[2]비교 -거짓.

12. 거짓이라 swap넘어감.

13. min=i<----3

14. for문반복 (1번)

15. list[j]와 list[3]비교-참

16. 교체-11-15-20-24-30

...

정렬완료됨.

Designed by JB FACTORY