본문 바로가기

개발/algorithm

[C/C++][algorithm] 선택정렬

반응형

※ 정렬 : 특정 기준을 적용하여 나열한다. 

 

※ 선택 정렬 : 최솟값을 계속 앞으로 이동 시킴 (기준 : 오름차순)

아직 정렬하지 않은 부분에서 값이 가장 작은 요소를 선택하고 아직 정렬하지 않은 부분의 첫 번째 요소와 교환 

 

6 4 8 3 1 9 7  :  1을 6과 교환 

1 4 8 3 6 9 7  :  3을 4와 교환 ..반복

결과 : 1 3 4 6 7 8 9

 

※ 구현 

 #include 
int main() {

int n;
int data[10] ;
scanf("%d", &n); 

//입력
for(int i=0; i<n; i++){  scanf("%d", &data[i]); }  

/*
최솟값 구하기 
      1. j의 위치를 하나씩 증가 시키면서 data[j]의 값과 현재 data[index]의 값을 비교   
      2. data[j]의 값이 data[index]보다 작을 경우 index의 값을 j의 값으로 바꿔줌  
      3. j의 위치 또 증가시켜줌  
      4. data[j]의 값이 data[index]보다 작을 경우 index를 또 새로운 j의 값으로 바꿔줌  
      5. 반복하여 가장 작은 값의 위치 j를 index에 넣어줌 
*/      

for(int i=0; i  <n; i++){   
	int index = i;
    for(int j = i ; j < n ; j++){
        if(data[index] > data[j]){
            index = j ; 
        }
 }
      
//swap
int temp ;
temp = data[i];
data[i] = data[index];
data[index] = temp;
}

//출력 
for(int i = 0 ; i  <n ; i++){ printf("%d", data[i]);    }
    
  return 0;
}
반응형