https://www.acmicpc.net/problem/5800
- 정렬 알고리즘(빠른정렬)을 이용해서 입력한 수를 정렬한다.
- 정렬한 배열의 원소들을 작은순서부터 2개씩 짝을지어 뺄셈을 수행하여 가장 큰 Gap을 찾는다.
arr[j + 1] - arr[j]
#include <iostream>
using namespace std;
void QuickSort(int l, int h, int *arr) {
if (h <= l)
return;
int p = l;
int i = p + 1, j = h, temp;
while( i <= j)
{
while (i <= h && arr[i] <= arr[p])
i++;
while (j > l && arr[j] >= arr[p])
j--;
if (i > j) {
temp = arr[p];
arr[p] = arr[j];
arr[j] = temp;
} else {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
QuickSort(l, j - 1, arr);
QuickSort(j + 1, h, arr);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int num;
cin >> num;
for(int i = 0; i < num; i++)
{
int size;
cin >> size;
int *arr = new int[size];
for(int j = 0; j < size; j++)
cin >> arr[j];
QuickSort(0, size - 1, arr);
int maxGap = INT32_MIN;
for(int j = 0; j < size - 1; j++)
{
if(maxGap < arr[j + 1] - arr[j])
maxGap = arr[j + 1] - arr[j];
}
printf("Class %d\n", i + 1);
printf("Max %d, Min %d, Largest gap %d\n", arr[size - 1], arr[0], maxGap);
delete [] arr;
}
}