- bubble sort

- 인접한 2개의 레코드를 비교하여 크기가 순서대로 되어 있지 않으면 서로 교환하는 비교-교환 과정을 리스트의 왼쪽 끝에서 시작하여 오른쪽 끝까지 진행

- 시간 복잡도 : 
 항상 일정



- 코드

 
void bubbleSort(int *a, int size) 
{
     for(int i = size - 1; i > 0; i--) {
          for(int j = 0; j < i; j++) {
               if(a[j] > a[j+1]) {
                    swap(a, j, j+1);
               }
          }            
     }
 }


'Algorithm' 카테고리의 다른 글

알고리즘 - 합병 정렬  (0) 2015.11.12
알고리즘 - 셸 정렬  (0) 2015.11.12
알고리즘 - 삽입 정렬  (0) 2015.11.12
알고리즘 - 선택 정렬  (0) 2015.11.12
알고리즘 - 재귀 호출  (0) 2015.11.12

- insertion sort

오른쪽 리스트(정렬 안 된)에서 왼쪽 리스트(정렬 된)로 하나씩 자리를 찾아 삽입하면서 정렬

- 삽입을 위해 배열을 계속 이동시켜야 함

- 자료가 이미 정렬되어 있는 경우의 시간 복잡도 : 

  자료가 역순일 경우 최악의 
복잡도 : 


- 코드

void insertion_sort ( int *data, int n )
{
  int i, j, remember;
  for ( i = 1; i < n; i++ )
  {
    j = i;
    remember = data[j];
    while ( --j >= 0 && remember < data[j] )
        data[j+1] = data[j];
    data[j+1] = remember; 
  }
}
 

'Algorithm' 카테고리의 다른 글

알고리즘 - 셸 정렬  (0) 2015.11.12
알고리즘 - 버블 정렬  (0) 2015.11.12
알고리즘 - 선택 정렬  (0) 2015.11.12
알고리즘 - 재귀 호출  (0) 2015.11.12
알고리즘 - 복잡도 분석  (0) 2015.11.12

- selection sort

- 오른쪽 리스트(정렬 안 된)에서 가장 작은 숫자를 선택하여 왼쪽 리스트(정렬 된)로 이동하는 작업을 반복

- 시간 복잡도 : 




- 코드

void selectionSort(int* list, size) {
    int indexMin, temp;

    for (int i = 0; i < size; i++) {
        indexMin = i;
        for (int j = i + 1; j < list.length; j++) {
            if (list[j] < list[indexMin]) {
                indexMin = j;
            }
        }
        temp = list[indexMin];
        list[indexMin] = list[i];
        list[i] = temp;
    }
}

'Algorithm' 카테고리의 다른 글

알고리즘 - 버블 정렬  (0) 2015.11.12
알고리즘 - 삽입 정렬  (0) 2015.11.12
알고리즘 - 재귀 호출  (0) 2015.11.12
알고리즘 - 복잡도 분석  (0) 2015.11.12
알고리즘 문제 풀이 주의사항  (0) 2015.11.05

+ Recent posts