티스토리 뷰

공부 이야기

[C] 삽입 정렬

판다(panda) 2009. 9. 16. 00:03
Microsoft Visual Studio 2005 버전으로 작성되었습니다..
미리 컴파일 된 헤더를 사용했습니다..
삽입 정렬..



#include "stdafx.h"
#include <stdlib.h>

// A[] : 데이터 배열
// n : 데이터 갯수
// A[0..n] 배열을 정렬한다.

// 비주얼 요소 추가
void Display(int A[], int n);

void insertionSort(int A[], int n, int i)
{

 if( i == n ) 

  return;

 int j = i;
 int tmp = A[i];     // 비교대상 값을 tmp 저장

 while( A[j-1] > tmp && j > 0 ) // 바로 앞 배열의 값과 tmp 값 비교
 {

  A[j] = A[j-1];    // 앞 배열의 값이 크면 한칸 이동
  j--;      // 비교대상 값 보다 작은 값 나올때까지 반복

 }

 A[j] = tmp;      // 앞 배열의 값이 tmp 값 보다 작으면 배열 뒤에 tmp 값 삽입
   
 Display(A, n);

 insertionSort(A, n, i+1);

}

void Display(int A[], int n)
{

 system("cls");
 
 for(int i = 0; i < n; i++)
 {

  printf("%2d ", A[i]);
  for(int j = 0; j < A[i]; j++)

   putchar('#');

  printf("\n");

 }

 _sleep(100);

}

int _tmain(int argc, _TCHAR* argv[])
{

 int A[] = {8, 31, 48, 73, 3, 65, 20, 29, 11, 15};

 insertionSort(A, 10, 1);
 
 Display(A, 10);
 
 return 0;

}

실행결과 : 정렬이 되는 과정을 보여준다.