심심해서 작성한 코드
#include<iostream>
#include<algorithm>
using namespace std;
class Arr
{
public:
int* arr;
int _size;
Arr(int b)
{
arr = new int[b];
for (int i = 0; i < b; i++)
{
*(arr + i) = rand()%100;
}
_size = b;
mergeArr = new int[b];
}
~Arr()
{
delete arr;
delete mergeArr;
}
void ShowArr()
{
for (int i = 0; i < _size; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
void Insertion()
{
for (int i = 1; i < _size; i++)
{
int index = i , tmp=arr[index];
for (int j = i - 1; j >= 0; j--)
{
if (arr[j] > tmp)
{
arr[index] = arr[j];
index--;
}
else break;
}
arr[index] = tmp;
}
}
void Quick(int start, int end)
{
int pivot, L, R, tmp;
pivot = start;
if (end - start <= 0) return;
L = start + 1;
R = end;
while (L <= R)
{
while (L <= end&&arr[L]<arr[pivot])
L++;
while (R>start && arr[R] >= arr[pivot])
R--;
if (L < R)
{
tmp = arr[L];
arr[L] = arr[R];
arr[R] = tmp;
}
else
{
tmp = arr[R];
arr[R] = arr[pivot];
arr[pivot] = tmp;
}
}
Quick(start, R -1);
Quick(R+1,end);
}
int* mergeArr;
void MergeSort(int L, int R)
{
int M = (L + R) / 2;
int tmpindex = L;
int Lindex = L;
int Rindex = M+1;
while (Lindex<M+1&&Rindex<=R)
{
if (arr[Lindex] > arr[Rindex])
mergeArr[tmpindex++] = arr[Lindex++];
else
mergeArr[tmpindex++] = arr[Rindex++];
}
if(Lindex>M)
while(tmpindex<=R)
mergeArr[tmpindex++] = arr[Rindex++];
else
while (tmpindex <= R)
mergeArr[tmpindex++] = arr[Lindex++];
for (; L <= R; L++)
arr[L] = mergeArr[L];
}
void Merge(int L, int R)
{
int M = (L + R) / 2;
if (L == R) return;
Merge(L,M);
Merge(M+1, R);
MergeSort(L,R);
}
void Heap()// 객체의 배열을 heap으로 만드는 과정
{
//mergeArr 납치
int size=0;
while (size<_size)
{
mergeArr[size] = arr[size];
//0 1(3(78)4)2(56)
if (size == 0)
{
size++;
continue;
}
for (int Hsize=size; Hsize>0; Hsize= (Hsize - 1) / 2)
{
if (mergeArr[Hsize] > mergeArr[(Hsize - 1) / 2])
{
int tmp = mergeArr[Hsize];
mergeArr[Hsize] = mergeArr[(Hsize - 1) / 2];
mergeArr[(Hsize - 1) / 2] = tmp;
}
}
size++;
}
}
void HeapSort()
{
Heap();
for (int i = 0; i < _size; i++)
arr[i] = mergeArr[i];
}
};
int main()
{
srand(static_cast<unsigned int>(time(nullptr)));
Arr a(10);
a.Insertion();
a.ShowArr();
cout << endl;
Arr b(6);
b.Quick(0, 5);
b.ShowArr();
cout << endl;
Arr c(7);
c.Merge(0, 6);
c.ShowArr();
cout << endl;
Arr d(9);
d.HeapSort();
d.ShowArr();
}