자료구조 : 단순 정렬

ROK·2022년 11월 3일
0

열혈 자료구조

목록 보기
27/30

단순 정렬 알고리즘

그림 추가 예정

버블 정렬(Bubble Sort)

버블정렬은 일반적인 정렬이라고 하면 알 수 있는 정렬방법이다.

정렬 중에는 구현이 간단하고 이해하기도 쉽다.

버블정렬은 인접한 두 데이터를 비교해서 정렬을 진행하는 방식이다.

버블 정렬 코드

#include <stdio.h>

void BubbleSort(int arr[], int n);

int main()
{
   int arr[4] = {3, 2, 4, 1};
   int i;

   BubbleSort(arr, sizeof(arr) / sizeof(int));

   for (i = 0; i < 4; i++)
   {
      printf("%d ", arr[i]);
   }
   printf("\n");

   return 0;
}

void BubbleSort(int arr[], int n)
{
   int i, j;
   int temp;

   for (i = 0; i < n - 1; i++)
   {
      for (j = 0; j < (n - i) - 1; j++)
      {
         if (arr[j] > arr[j + 1])
         {
            temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
         }
      }
   }
}

선택 정렬(Selection Sort)

버블 정렬보다 쉽고 간단한 알고리즘이다.
정렬 대상이 있으면 대상을 하나씩 선택해 옮기는 방식의 정렬 알고리즘

선택 정렬 코드

#include <stdio.h>

void SelSort(int arr[], int n);

int main()
{
   int arr[4] = {3, 2, 4, 1};
   int i;

   SelSort(arr, sizeof(arr) / sizeof(int));

   for (i = 0; i < 4; i++)
   {
      printf("%d ", arr[i]);
   }
   printf("\n");

   return 0;
}

void SelSort(int arr[], int n)
{
   int i, j;
   int maxIdx;
   int temp;

   for (i = 0; i < n - 1; i++)
   {
      maxIdx = i;

      for (j = i + 1; j < n; j++)
      {
         if (arr[j] < arr[maxIdx])
         {
            maxIdx = j;
         }
      }

      temp = arr[i];
      arr[i] = arr[maxIdx];
      arr[maxIdx] = temp;
   }
}

삽입 정렬(Insertion Sort)

삽입 정렬은 정렬이 완료된 부분과 완료되지 않은 부분으로 정렬 대상을 두 부분으로 나눠서, 정렬 안 된 부분에 있는 데이터를 정렬 된 부분의 특정 위치에 삽입하면서 정렬을 진행하는 알고리즘이다.

삽입 정렬 코드

#include <stdio.h>

void InsertSort(int arr[], int n);

int main()
{
   int i, j;
   int arr[5] = {5, 3, 2, 4, 1};

   InsertSort(arr, sizeof(arr) / sizeof(int));

   for (i = 0; i < 5; i++)
   {
      printf("%d ", arr[i]);
   }
   printf("\n");

   return 0;
}

void InsertSort(int arr[], int n)
{
   int i, j;
   int insData;

   for (i = 1; i < n; i++)
   {
      insData = arr[i];

      for (j = i - 1; j >= 0; j--)
      {
         if (arr[j] > insData)
         {
            arr[j + 1] = arr[j];
         }
         else
         {
            break;
         }
      }

      arr[j + 1] = insData;
   }
}
profile
하루에 집중하자

0개의 댓글