//아카데미에서 공부한답시고 대충 만든거라 문제 많다는 것이 큰 문제...
#include <iostream>
#include <ctime>
using namespace std;
//필요한 배열 버퍼 초기화
int Arrary[255] = { 0, };
//사용할 함수 선언
int input(int data, int index);
void Quick_Sort(int arrary[], int L_index, int R_index);
int partition(int arrary[], int L_index, int R_index);
int Search(int input, int f_index, int l_index);
double round(double value, int pos);
void show();
void Timer_Start();
clock_t Time_Stop();
clock_t CurTime, CheckTime;
void main()
{
int Random = 0; int exit = 1; int check = 0;
int i = 0; int command = 0; int I_search = 0;
while (exit)
{
cout << "이진 트리 검색 예제 프로그램\n";
cout << "랜덤 데이터 입력 작동(1)\n데이터 정렬[퀵 정렬](2)\n데이터 화면 출력(3)\n데이터 검색[이진 검색](4)\n프로그램 종료(0)\n";
cout << "입력 : ";
cin >> command;
switch (command)
{
case 1:
Timer_Start();
srand((unsigned)time(0));
for (i = 0; i < 255;)
{
Random = (rand() % 255) + 1;
// Random = (1000 * (rand() % 1000) + (rand() % 1000)) + 1;
i = input(Random, i);
}
cout << Time_Stop() << endl;
cout << "입력 완료!\n\n";
break;
case 2:
Timer_Start();
Quick_Sort(Arrary, 0, i - 1);
cout << Time_Stop() << endl;
cout << "정렬 완료!\n\n";
break;
case 3:
show();
break;
case 4:
cout << "검색할 데이터 값 입력 : ";
cin >> I_search;
check = Search(I_search, 0, i - 1);
if (check == -1)
cout << "에러!\n\n";
else
cout << "동일한 데이터 확인 : " << Arrary[check] << ", " << "인덱스 값 : " << check << "\n\n";
break;
case 0:
exit = 0;
break;
}
}
}
int input(int data, int index)
{
for (int i = 0; i < index;)
{
if (Arrary[i] != data)
i++;
else
return index;
}
Arrary[index] = data;
return index += 1;
}
void show()
{
for (int i = 0; i < 255; i++)
{
cout << i + 1 << "번째 데이터 : " << Arrary[i] << endl;
}
cout << "\n";
}
void Quick_Sort(int arrary[], int L_index, int R_index)
{
int point;
if (L_index < R_index)
{
point = partition(arrary, L_index, R_index);
Quick_Sort(arrary, L_index, point - 1);
Quick_Sort(arrary, point + 1, R_index);
}
}
int partition(int arrary[], int L_index, int R_index)
{
int left = L_index, right = R_index; int point = arrary[L_index], temp;
while (left<right)
{
while (left <= R_index && arrary[left] < point)
{
left++;
}
while (right >= L_index && arrary[right] > point)
{
right--;
}
if (left < right)
{
temp = arrary[left];
arrary[left] = arrary[right];
arrary[right] = temp;
}
}
temp = arrary[left];
arrary[left] = arrary[right];
arrary[right] = temp;
return right;
}
int Search(int input, int f_index, int l_index)
{
int low = 0; int High = input; int mid = 0;
if (low < High)
{
mid = (int)round(((double)(l_index + f_index) / 2), 0);
if (High != Arrary[mid])
{
if (High < Arrary[mid])
{
return Search(High, f_index, mid);
}
else if (High > Arrary[mid])
{
return Search(High, mid, l_index);
}
}
else if (High == Arrary[mid])
{
//cout << "동일한 데이터 확인 : " << Arrary[mid] << ", " << "인덱스 값 : " << mid << endl;
return mid;
}
}
else
return -1;
// return 0;
}
double round(double value, int pos)
{
double temp;
temp = value * pow(10, pos); // 원하는 소수점 자리수만큼 10의 누승을 함
temp = floor(temp + 0.5); // 0.5를 더한후 버림하면 반올림이 됨
temp *= pow(10, -pos); // 다시 원래 소수점 자리수로
return temp;
}
void Timer_Start()
{
CheckTime = clock();
}
clock_t Time_Stop()
{
CurTime = clock();
return ((CurTime - CheckTime) / 1000);
}
'[C], [ C++]' 카테고리의 다른 글
퀵 정렬 - Quick Sort (0) | 2015.05.28 |
---|---|
삽입 정렬 - Insert Sort (0) | 2015.05.28 |
버블 정렬(Bubble Sort) (0) | 2015.05.28 |
이진 트리 예제 (0) | 2015.05.28 |
이진 검색 트리 알고리즘(배열, 재귀함수) (0) | 2015.05.28 |