C언어 - 순차 정렬
본문 바로가기
CS/알고리즘 및 자료구조

C언어 - 순차 정렬

by IYK2h 2020. 11. 20.
728x90

순차정렬은 단순하게 0~N의 자리를 순차적으로 진행하며 정렬하는 알고리즘이다.

 

기준점을 0 혹은 N으로 두고 커지거나 작아지면서 정렬해가면 된다.

 

순차 정렬, 버블 정렬, 선택 정렬 세 정렬은 코드는 단순하나 컴퓨터 입장에서 비효율 적이여서 싫어하는 정렬이다. 비교대상이 30개 미만일 경우 사용하기에 좋다.

 

비교 횟수는 n-1 -> n-2 -> n-3 -> ... -> n-n+3 -> n-n+2 -> n-n-1 순으로 값이 줄어들며 비교된다.

 

비교하는 값은 노란색,정렬후 값은 보라색

 

 


핵심 알고리즘


for(int i = 0; i<n; i++) {
    for(int j = i; j<n; j++) {
        if(arr[i]>arr[j])
            swap(&arr[i],&arr[j]);
    }
}

 

코드


#include <stdio.h>

void SequentialSort(int *a,int n, int i, int j);
void printarr(int *a, int n, int i, int j);
void swap(int *a, int *b);

int main() {
    int arr[] = {7,2,4,8,6};
    SequentialSort(arr,5,0,0);

    return 0;
}

void SequentialSort(int *arr, int n, int i, int j) {
    printarr(arr, n, -1, -1);
    for(i = 0; i<n; i++) {
        for(j = i+1; j<n; j++) {
            printarr(arr, n, i, j);
            if(arr[i]>arr[j])
                swap(&arr[i],&arr[j]);
        }
    }
    i = n;
    printarr(arr, n, i, j);
}

void printarr(int *arr, int n, int i, int j) {
    int text=0;
    for(int c = 0; c<n; c++) {
        if ( c < i) {
            printf("\x1b[35m");
        }
        else if ( c == i) {
            printf("\x1b[33m");
        }
        else if ( c < j) {
            printf("\x1b[37m");
        }
        else if (c == j) {
            printf("\x1b[33m");
        }
        else{
            printf("\x1b[37m");
        }
        printf("%d", arr[c]);
    }
    printf("\n");
}

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

 

 

 

728x90

댓글