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
'CS > 알고리즘 및 자료구조' 카테고리의 다른 글
c언어 - 선택 정렬 (Selection Sort) (0) | 2020.12.04 |
---|---|
C언어 - 버블 정렬 (Bubble Sort), 버블 정렬 개선 (0) | 2020.11.27 |
C언어 - 정렬 (Sort) (0) | 2020.11.13 |
C언어 - 배열 (0) | 2020.11.06 |
자료구조 (Data Structure) (0) | 2020.10.30 |
댓글