선택 정렬

- 선택 정렬이란 가장 작은 것을 선택해서 앞으로 보내는 정렬 기법

- 가장 작은 것을 선택하는 데에 n번, 앞으로 보내는 데에 n번의 연산으로 O(n2)의 시간 복잡도를 가짐

 

* 배열 선언

#define _CRT_SECUCRE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define SIZE 1000

int a[SIZE];

int swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

 

* 선택 정렬 수행하기

int main(void) {
    int n, min, index;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
    for (int i = 0; i < n; i++) {
        min = INT_MAX;
        for (int j = i; j < n; j++) {
            if (min > a[j]) {
                min = a[j];
                index = j;
            }
        }
        swap(&a[i], &a[index]);
    }
    for (int i = 0; i < n; i++) printf("%d ", a[i]);
    system("pause");
    return 0;
}

삽입 정렬

 

 

- 삽입 정렬이란 각 숫자를 적절한 위치에 삽입하는 정렬 기법

- 들어갈 위치를 선택하는 데에 n번, 선택하는 횟수로 n번이므로 O(n2)의 시간 복잡도를 가짐

 

* 삽입 정렬 수행하기

int main(void) {
    int n, min, index;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }

    for (int i = 0; i < n - 1; i++) {
        int j = i;
        while (j >= 0 && a[j] > a[j + 1]) {
            swap(&a[j], &a[j + i]);
            j--;   
        }
    }
    
    for (int i = 0; i < n; i++) 
    printf("%d ", a[i]);
    system("pause");
}

'자료구조 알고리즘' 카테고리의 다른 글

계수 정렬  (0) 2020.12.17
퀵 정렬  (0) 2020.12.11
  (0) 2020.12.10
스택을 활용한 계산기 만들기  (0) 2020.12.10
스택  (0) 2020.12.09
Posted by khon98
,