'분류 전체보기'에 해당되는 글 174건
- 2015.12.02 quick sort
- 2015.09.11 버블 정렬 예제 코드
- 2014.04.02 [Algorithm] Dragoon Curve
- 2013.12.13 [Algorithm] 폴리오미노
- 2013.08.15 배열을 이용한 간단한 원형 Queue
- 2013.08.15 배열을 이용한 간단한 선형 Queue
- 2013.06.23 작명학 관련 정보
- 2013.05.21 bubble sort / file open source code
- 2013.03.23 클래스간 Callback Sample Source
- 2012.11.27 [개인 프로젝트] 지진 알람 프로젝트 - 진행중
#include <iostream>
using namespace std;
void quicksort(int arr[],int first,int last);
int partition(int arr[], int first, int last);
int main()
{
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;
}
#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;
}
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 "#";
}
#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;
}
#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];
}
#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];
}
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;
}
클래스간 Callback Sample Source