1 분 소요



Sorting36


이번 포스트에서는 선택 정렬, 삽입 정렬, 병합 정렬 및 빠른 정렬과 같은 몇 가지 중요한 정렬 알고리즘을 소개한다.

선택 정렬과 삽입 정렬의 두 가지 알고리즘에 중점을 둘 것이다.



Quadratic Sorting Algorithms

2차 정렬 알고리즘



선택정렬

각 값 i(n-1에서 1까지)에 대해 다음을 수행

  • data[0]에서 data[i]까지 가장 큰 원소를 찾는다.
  • Swap it with data[i].


c++ 코드

void  selectionSort(int data[ ], size_t n)  {
  size_t  i, j, index_of_largest ;
  int  largest ;

  if (n==0) return  ;
  for ( i = n-1; i >0 ; --i)  {
    largest = data[0] ;
    index_of_largest = 0 ;
    // 가장 큰 index 찾기 아래 코드
    swap(data[i], data[index_of_largest]) ;  
  } 	
}

// 가장 큰 index 찾기 코드

for (j=1; j<=i ; ++j)   {
  if (data[j] > largest)  {
    largest = data[j] ;
    index_of_largest = j ;
  }
}


선택정렬 : 분석

얼마나 많은 비교 작업을 수행해야 할까?



삽입정렬

각 값 i(1에서 n-1까지)에 대해 다음을 수행

  • data[i]에 대해 0과 i-1 사이에서 적절한 인덱스 j를 찾는다.
  • 인덱스 j에서 i-1까지 각 데이터를 오른쪽으로 한 셀 이동한 후 data[i]를 해당 위치에 복사한다.


c++코드

void  insertionSort(int data[ ], size_t n)  {
  size_t  i, j;
  int  next ;

  if (n==0) return  ;
  for ( i = 1; i  < n ; ++i)  {
    next = data[i] ;
    j = i ;
    /* 다음의 삽입 인덱스 j 찾기 */
    data[j] = next  ;  
  } 	
}

//다음 삽입 인덱스 j 찾기 함수
while (j >0 && next < data[j-1]){
  data[j] = data[j-1] ;
  --j ;
}



삽입정렬 : 분석

얼마나 많은 비교 작업을 수행해야 할까?

댓글남기기