2015. 12. 2. 00:37

quick sort

#include <iostream>

using namespace std;

void quicksort(int arr[],int first,int last);
int partition(int arr[], int first, int last);

int main()
{

quick sort.cpp

 

quick sort.exe


    int array[8] = {216,4,22,8,21,225,2000,237};
    quicksort(array,0,7);
   
  
   
    system("pause");
    return 0;
   
}


void quicksort(int arr[], int first, int last)
{
    int p;
    if(first < last){      
             p = partition(arr,first,last);
             quicksort(arr,first,p-1);
             quicksort(arr,p+1,last);   
    }
     for(int i = 0 ; i < 8 ; i++)
    {
            cout<<arr[i]<<" ";      
    }
    cout<<endl;
}


int partition(int arr[], int first, int last)
{
    int low = first;
    int high = last - 1;
    int temp;
   
    while(low <= high)
    {
              while(arr[last] > arr[low]) low++;
              while(arr[last] < arr[high]) high--;
                 
              // 마지막 피벗과 바꿀 위치가 파악 되었을 떄는 이 부분이 실행되면 안된다.
              if(low <= high){
              temp = arr[low];
              arr[low] = arr[high];
              arr[high] = temp;
              }         
    }
    temp = arr[low];
    arr[low] = arr[last];
    arr[last] = temp;
   
    return low;  
}

2015. 9. 11. 01:22

버블 정렬 예제 코드

#include <stdio.h>
#define SIZE 10

int main()
{
    int a[SIZE] = {2,52,3,9,6,1,4,32,23,5};
    for(int i = 0 ; i <= SIZE ; i++)
    {
         for(int j = 0 ; j < i ; j++)

         {
        
                 if(a[j] > a[j+1])

                 {
                         int temp;
                         temp = a[j];
                         a[j] = a[j+1];
                         a[j+1] = temp;       
                        
                 }            
         }        
    }
    for(int k = 0 ; k < SIZE ; k++)
    {  
           printf("%d ",a[k]);       
    }
   
    system("pause");
    return 0;
   
}

 

 

2014. 4. 2. 00:38

[Algorithm] Dragoon Curve

const int MAX = 1000000000 + 1;

 

int length[51];

void precalc() {

length[0] = 1;

for(int i = 1 ; i < 51 ; i++) {

length[i] = min(MAX, 2 + 2 * length[i-1]);

}

}

 

const string EXPAND_X = "X+YF";

const string EXPAND_Y = "FX-Y";

 

char expand(const string& dragoon, int generation, int skip) {

// 기저 사례

if(generation == 0) {

return dragoon[skip];

}

 

for(int i = 0 ; i < dragoon.size() ; ++i) {

if(dragoon[i] == 'X' || dragoon[i] == 'Y') {

if(skip > length[generation])

skip -= length[generation];

else if(dragoon[i] == 'X')

return expand(EXPAND_X, generation - 1, skip);

else

return expand(EXPAND_Y, generation - 1, skip);

else if(skip > 0) // 확장되지는 않지만 한칸 건너 뛰어야 하는 경우 (F,+,-)

--skip;

else // 답을 찾은 경우

return dragoon[i];

}

}

return "#";

}

2013. 12. 13. 01:28

[Algorithm] 폴리오미노

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

const int MOD = 10*1000*1000;
int cache[101][101];
int N = 12;
int count = 0; // 메모이제이션 적용 시, 성능을 확인하기 위한 cnt

 

// - poly(int n, int first)함수의 기능 -

//   -> n개의 정사각형으로 이루어졌고, 맨 위 가로줄에 first개의

//       정사각형을 포함하는 폴리오미노의 수를 반환함

int poly(int n, int first){
 if(n == first) return 1;
 
 int& ret = cache[n][first];
 if (ret != -1) return ret;
 ret = 0;
 
 for(int second = 1 ; second <= n-first ; ++second){
  int add = second + first -1;
  int sum = poly(n-first, second);
  count++;
  
  // DSP 메모이제이션 상태 저장
  int temp = n - first;
  cache[temp][second] = sum;
  
  add = add * sum;
  add %= MOD;
    
  ret += add;
  ret %= MOD;
 }

  
 return ret;
}

int main()
{
 for(int i = 0 ; i < 101 ; i++)
  for(int j = 0 ; j < 101 ; j++)
   cache[i][j] = -1;
 
 int ret = 0;
 for(int i = 1 ; i <= N ; i++)
 {
  ret += poly(N, i);
  ret %= MOD;
 }
 
 printf("%d, cnt : %d", ret, count);
 
 system("pause");
 return 0;
}


2013. 8. 15. 18:36

배열을 이용한 간단한 원형 Queue

#define MAX_QUEUE_SIZE 6
static char queue[MAX_QUEUE_SIZE];

int main(void)
{
 int front, rear;
        front = rear = 0;
        int ret;
   
        addQeueu(&rear, front, 'A');
        addQeueu(&rear, front, 'B');
        addQeueu(&rear, front, 'C');
        ret = delQueue(&front, rear);

        system("pause");
        return 0;
}

void addQeueu(int last, int first, int data)
{
        *last = (*last + 1) % MAX_QUEUE_SIZE;
 if(*last == first) {
  queue_full();   // 구현은 생략 : last 즉 rear이 이동 되었기 때문에 reset 작업 필요
                return;
 }
 queue[*last] = data;
}

int delQueue(int first, int last)
{
 if(*first == last) {
   return queue_empty();  // 구현은 생략
        }
 *first = (*first + 1) % MAX_QUEUE_SIZE;
        return queue[*first];
}

2013. 8. 15. 18:24

배열을 이용한 간단한 선형 Queue

#define MAX_QUEUE_SIZE 6
static char queue[MAX_QUEUE_SIZE];

int main(void)
{
 int front, rear;
        front = rear = -1;
        int ret;
   
        addQeueu(&rear, 'A');
        addQeueu(&rear, 'B');
        addQeueu(&rear, 'C');
        ret = delQueue(&front, rear);

        system("pause");
        return 0;
}

void addQeueu(int last, int data)
{
 if(*last == MAX_QUEUE_SIZE - 1) {
  queue_full();   // 구현은 생략
                return;
 }
 queue[++*last] = data;
}

void delQueue(int first, int last)
{
 if(*first == last) {
   return queue_empty();  // 구현은 생략
        }
        return queue[++*first];
}


    

 

2013. 6. 23. 16:05

작명학 관련 정보

2013. 5. 21. 23:53

bubble sort / file open source code

#include "bubbleSort.h"

bubbleSort::bubbleSort(void)
{
}

bubbleSort::~bubbleSort(void)
{
}

int bubbleSort::startSort(int* arr_list, int size)
{
 int i, j, temp;
 for(i = 0 ; i < size ; i++){
  for(j = 0 ; j < size - 1 ; j++){
   if(arr_list[j] > arr_list[j+1])
   {
    temp = arr_list[j+1];
    arr_list[j+1] = arr_list[j];
    arr_list[j] = temp;
   }
  }
 }
 return 0;
}

int bubbleSort::fileopenTest()
{
 FILE* fileTest;
 FILE* fileOutput;
 int temp1, temp2, temp3;
 char c_temp1, c_temp2;

 fileTest = fopen("test1.txt", "rt");
 if(fileTest == NULL)
 {
  printf("file open error");
 }

 fileOutput = fopen("test2.txt", "wt");
 if(fileOutput == NULL)
 {
  printf("file open error2");
 }

 fscanf(fileTest, "%d\n", &temp1);
 printf("%d\n", temp1);

 for(int i = 0 ; i < 2 ; i++ )
 {
  fscanf(fileTest, "%c%c\n", &c_temp1, &c_temp2);
  fprintf(fileOutput, "(%c-%c)\n", c_temp1, c_temp2);
  fscanf(fileTest, "%d %d %d\n", &temp1, &temp2, &temp3);
  fprintf(fileOutput, "(%d)\n", temp1 + temp2 + temp3);
 }

 fclose(fileOutput);
 fclose(fileTest);

 return 0;
}

int main()
{
 int arr[10] = {123,456,2367,324,67,3213,545,12,4,997};
 bubbleSort sort;

 sort.startSort(arr, 10);

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

 sort.fileopenTest();

 system("pause");
 return 0;
}

 

2013. 3. 23. 00:51

클래스간 Callback Sample Source

클래스간 Callback Sample Source

Callback.zip

2012. 11. 27. 23:02

[개인 프로젝트] 지진 알람 프로젝트 - 진행중