/**
#include <stdio.h>
#include <stdlib.h>
int arr[100001];
void q_s(int s, int e)// arr[s] ~ arr[e] 퀵정렬해라
{
int k;
int pivot = s;
int left = s, right = e+1;
//종료조건
if(s >= e) return ;
// printf("arr[%d]~arr[%d]\n",s,e);
while(1){
do{
left ++;
} while(arr[pivot] > arr[left]);
do{
right --;
}
while(arr[pivot] < arr[right]);
if(left > right) break;
// printf("left %d.. right %d\n",left,right);
k = arr[left];
arr[left] = arr[right];
arr[right] = k;
}
//........ arr[right] .........
k = arr[pivot];
arr[pivot] = arr[right];
arr[right] = k;
q_s(s,right - 1);
q_s(right + 1, e);
}
int main()
{
int i,j,n,m;
scanf("%d", &n);
for (i = 1 ; i <= n ; i ++)
{
scanf("%d", &arr[i]);
}
q_s(1, n);
for (i = 1 ; i <= n ; i ++)
{
printf("%d\n", arr[i]);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int arr[100001];
int compare(int* pa, int* pb){
if(*pa>*pb) return 1;
else if(*pa<*pb) return -1;
else return 0;
}
int main()
{
int i,j,n,m;
scanf("%d", &n);
for (i = 0 ; i < n ; i ++)
{
scanf("%d", &arr[i]);
}
qsort(arr,n,sizeof(int),compare);
//qsort(배열시작주소, 배열길이,데이터크기,compare);
for (i = 0 ; i < n ; i ++)
{
printf("%d\n", arr[i]);
}
return 0;
}
내장퀵정렬 사용하는 연습하기
4501 해결!
4026 he결!
1805 하는중
#include<stdio.h>
int arr[11];
int compare(int* pa, int* pb)
{
if (*pa < *pb)
{
return 1;
}
else if (*pa > *pb)
{
return -1;
}
else
{
return 0;
}
}
int main()
{
int i,j,k,n,m;
for (i = 1 ; i <= 7 ; i ++)
{
scanf("%d", &arr[i]);
}
qsort(&arr[1], 7, sizeof(int), compare);
printf("%d\n%d", arr[1], arr[2]);
}
58 35 77 59 68
#include<stdio.h>
int compare(int* pa, int* pb)
{
if (*pa < *pb)
{
return 1;
}
else if (*pa > *pb)
{
return -1;
}
else
{
return 0;
}
}
int arr[100001];
int main()
{
int i,j,k,n,m;
for (i = 1 ; i <= 5 ; i ++)
{
scanf("%d", &arr[i]);
}
qsort(&arr[1], 5, sizeof(int), compare);
printf("%d", arr[3]);
return 0;
}
#include<stdio.h>
typedef struct
{
int a;
int b;
}t;
int compare(t* pa, t*pb)
{
if ((*pa).a > (*pb).a)
{
return 1;
}
else if ((*pa).a < (*pb).a)
{
return -1;
}
else
{
return 0;
}
}
int main()
{
int i,j,k,n,m;
t arr[10001];
scanf("%d", &n);
for (i = 1 ; i <= n ; i ++)
{
scanf("%d %d", &arr[i].a, &arr[i].b);
}
qsort(&arr[1], n, sizeof(t), compare);
for (i = 1 ; i <= n ; i ++)
{
printf("%d %d\n", arr[i].a, arr[i].b);
}
return 0;
}
3001- 걍 탐색 - 해결!
3002- 이진탐색 - 하는중
2633 - bs함수 살짝변형 - 에엑따
binary search : 정.렬.된.데이터셋에서 원하는 데이터 위치 찾기
int bs(int s, int e, int k){ //arr[s] ~ arr[e]에서 k값의 위치 리턴, 없다면 -1리턴
int mid=(s+e)/2;
//종료조건
if(s>e) return -1; //없다!!
if(arr[mid]==k) return mid;
else if(arr[mid]<k) return bs(mid+1,e,k);
else return
#include<stdio.h>
int main()
{
int i,j,k,n,m;
int arr[100001] = {};
scanf("%d", &n);
for (i = 1 ; i <= n ; i ++)
{
scanf("%d", &arr[i]);
}
scanf("%d", &m);
for (i = 1 ; i <= n ; i ++)
{
if (arr[i] == m)
{
printf("%d", i);
return 0;
}
}
printf("-1");
return 0;
}
**/
#include<stdio.h>
int arr[1000001];
int bs(int s, int e, int k)
{
int mid = (s + e) / 2;
if (s > e)
{
return -1;
}
if (arr[mid] == k)
{
return mid;
}
else if (arr[mid] < k)
{
return bs(mid + 1, e, k);
}
else
{
return bs(s, mid - 1, k);
}
}
int main()
{
int i,j,n,m,t;
scanf("%d", &n);
for (i = 1 ; i <= n ; i ++)
{
scanf("%d", &arr[i]);
}
scanf("%d", &m);
for (i = 1 ; i <= m ; i ++)
{
scanf("%d", &t);
printf("%d ",bs(1, n, t));
}
}