n개 수 집합에서 i번째로 작은 원소 찾기 (i = 0 이면 최솟값, i=n-1 이면 최댓값)
n이 홀수일 때, i = (n-1)/2 중앙값, 짝수일 때 i=$\frac{2}{n}-1$, $\frac{2}{n}$ 이면 중앙값
이번 챕터에서는 i=$\frac{2}{n}-1$ 을 중앙값으로 한다. $\therefore median_i = \lfloor \frac{n-1}{2} \rfloor$
최댓값과 최솟값 구하기
#include <iostream>
using namespace std;
int minimum(int* A, int n){
int min = A[0];
for(int i = 1; i<n; i++){
if(min>A[i]){
min = A[i];
}
}
return min;
}
int main() {
int A[10] = {9,8,7,5,3,6,4,2,0,1};
int size = sizeof(A)/sizeof(A[0]);
int min = minimum(A, size);
cout<<min;
}
#include <iostream>
#include <vector>
using namespace std;
typedef struct Point{
int min_v;
int max_v;
}Point;
Point min_max(int* A, int n){
int max = -987654321;
int min = 987654321;
int i = 0;
while(i+2 <= n){
if(A[i]<A[i+1]){
if(A[i]<min) min = A[i];
if(A[i+1]>max) max = A[i+1];
}
else{
if(A[i+1]<min) min = A[i+1];
if(A[i]>max) max = A[i];
}
i = i+2;
}
if(n%2 == 1){
if(A[n-1] < min) min = A[n-1];
if(A[n-1]> max) max = A[n-1];
}
return {min, max};
}
int main() {
int A[10] = {9,8,7,5,3,6,4,2,0,1};
int size = sizeof(A)/sizeof(A[0]);
Point result = min_max(A, size);
cout<<result.min_v<<" "<<result.max_v;
}