[논리적 사유연습]선택정렬, 버블정렬, 삽입정렬

2013. 5. 27. 11:38프로그래밍/C/C++

#include <stdio.h>

#include <time.h>

#include <stdlib.h>


#define SIZE 10


//배열의 모든 값을 출력하는 함수

void Print(int x[], int size)

{

int i;

for(i=0 ; i<size ; i++)

{

printf("%d\n", x[i]);

}

printf("\n");

}


//선택정렬

SelectionSort(int x[], int size)

{

int k, i, temp, sel;


//size-1만큼 반복한다.

for(i=0 ; i<size-1 ; i++)

{

//첫번째 인덱스를 선택

sel = i;

//선택된 인덱스의 다음 인덱스부터 끝까지 값을 비교한다.

for(k=i+1 ; k<size ; k++)

{

//현재 인덱스의 배열 값보다 작은 값이 있다면 그 값을 선택한다.

if(x[k] < x[sel]) 

sel = k;

}


//연산이 시작된 첫번재 배열에 작은 값을 대입한다.

if(sel != i)

{

temp = x[sel];

x[sel] = x[i];

x[i] = temp;

}

}

}


//버블정렬

BubbleSort(int x[], int size)

{

int i, k, temp;

//size-1만큼 반복

for(i=0 ; i<size-1 ; i++)

{

//뒤에서부터 두개식 비교(이미 정렬된 값은 비교 하지 않음)

for(k=size-1 ; k>i ; k--)

{

//두개씩 비교하여 작은 값을 앞으로 보낸다.

if(x[k-1] > x[k])

{

temp = x[k-1];

x[k-1] = x[k];

x[k] = temp;

}

}

}

}

 

//삽입정렬
void InsertSort(int x[], int size)
{
 int i, k, temp;

 for(i=1 ; i<size ; i++)
 {
  temp = x[i];
  for(k=i-1 ; k>=0 ; k--)
  {
   if(temp < x[k])
   {
    x[k+1] = x[k];
   }
   else
   {
    break;
   }
  }
  x[k+1] = temp;
 }
}

int main()

{

//배열과 변수를 생성

int data[SIZE];

int i;

//랜덤시드값을 준다.

srand((unsigned)time(0));


//배열의 각요소에 랜덤값을 부여한다.

for(i=0 ; i<SIZE ; i++)

{

data[i] = rand();

}


//원래 값 출력

Print(data, SIZE);

//선택정렬

SelectionSort(data, SIZE);

//정렬된 값 출력

Print(data, SIZE);

BubbleSort(data, SIZE);

//정렬된 값 출력

Print(data, SIZE);


return 0;

}

 

 


 

//삽입정렬 과정을 지켜보는 코드

//SIZE는 5로 두고 과정을 지켜본다.

 

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define SIZE 5

//배열의 모든 값을 출력하는 함수
void Print(int x[], int size)
{
 int i;
 
 for(i=0 ; i<size ; i++)  
 {
  printf("%d ", x[i]); 
 }
 printf("\n");
}

//삽입정렬
void InsertSort(int x[], int size)
{
 int i, k, temp;

 printf(" 처음 배열 : ");
 Print(x, size);
 for(i=1 ; i<size ; i++)
 {
  printf("i : %d********************\n", i);
  temp = x[i];
  for(k=i-1 ; k>=0 ; k--)
  {
   printf("        k : %d************\n", k);
   if(temp < x[k])
   {
    printf("            temp : %d\n", temp);
    printf("            x[k] : %d\n", x[k]);
    printf("            x[k+1] : %d\n", x[k+1]);
    x[k+1] = x[k];
   }
   else
   {
    printf("            break\n");
    break;
   }
  }
  x[k+1] = temp;
  printf(" 바뀐 배열 : ");
  Print(x, size);
  printf("\n");
 }
}

int main()
{
 
 //배열과 변수를 생성 
 int data[SIZE]; 
 int i;
  
 //랜덤시드값을 준다. 
 srand((unsigned)time(0));
  
 //배열의 각요소에 랜덤값을 부여한다. 
 for(i=0 ; i<SIZE ; i++)  
 { 
  data[i] = rand()%100;  
 }
 
 //삽입정렬
 InsertSort(data, SIZE);
 
 return 0; 
}