본문 바로가기

C언어/자료구조

6-3장 단순 선택 정렬

1. 단순 선택 정렬 알아보기 

 

단순 선택 정렬 (straight selection sort)

 

- 가장 작은 요소부터 선택해 알맞은 위치로 옮겨서 순서대로 정렬

- 교환 과정

 1) 아직 정렬하지 않은 부분에서 가장 작은 키의 값 (a[min])을 선택

 2) a[min]과 아직 정렬하지 않은 부분의 첫 번째 요소를 교환

 

 ex) 배열 {6,4,8,3,1,9,7}을 선택 정렬 

 - 아직 정렬하지 않은 부분에서 값이 가장 작은 요소를 선택하고

 - 아직 정렬하지 않은 부분의 첫번째 요소와 교환

 

- 단순 선택 정렬 프로그램

//단순 선택 정렬  
#include <stdio.h> 
#include <stdlib.h>
#define swap(type,x,y) do {type t=x; x=y; y=t;} while(0)

void selection(int a[],int n)
{
	for(int i=0; i < n-1; i++)
	{
		int min =i; //a[i]~a[i-1]중에서 가장 작은 값을 가지는 요소의 인덱스 
		//i+1부터 n까지 가면서 최소값의 인덱스를 찾음
		for(int j=i+1; j<n; j++) 
			if(a[j]<a[min])
				min=j;
		swap(int,a[i], a[min]);
	}
}

int main()
{
	int nx;
	
	puts("단순 선택 정렬 ");
	printf("요소 개수:");
	scanf("%d",&nx);
	int *x=(int*)calloc(nx, sizeof(int));
	
	for(int i=0; i<nx; i++)
	{
		printf("x[%d]:",i);
		scanf("%d",&x[i]);
	}
	
	selection(x,nx); //배열 x를 선택정렬  
	
	puts("오름차순으로 정렬했습니다.");
	for(int i=0; i<nx; i++)
		printf("x[%d]=%d\n",i,x[i]);
		
	free(x); //배열 해제 
	
	return 0; 
}

 

 - 요솟값의 비교하는 횟수 

 (n^2-n)/2회 

 

- 불안정 정렬

 -> 중복된 값이 있을떄  입력순서와 동일하지 않게 정렬

'C언어 > 자료구조' 카테고리의 다른 글

6-5장 쉘 정렬  (0) 2023.07.31
6-4장 단순 삽입 정렬  (0) 2023.07.28
6-2장 버블 정렬  (0) 2023.07.28
6-1장 정렬  (0) 2023.07.28
5-4장 8퀸 문제  (0) 2023.07.28