#include <stdio.h>

void swap(int data[], int a, int b) {
	int temp = 0;
	temp = data[a];
	data[a] = data[b];
	data[b] = temp;
}

int partition(int data[], int left, int right) {
	int pivot = data[left];
	int low = left +1;
	int high = right;

	while (low <= high)
	{
		while (low <= right && pivot >= data[low])
			low++;
		while (high >= (left+1) && pivot <= data[high])
			high--;

		if (low <= high) {
			swap(data, low, high);
		}
	}

	swap(data, left, high);
	return high;
}

void quick_select(int data[], int left, int right, int k) {
	int pivot = 0;
	if (left >= right) {
		return;
	}

	pivot = partition(data, left, right);

	if (pivot == k)
		return;
	else if (pivot > k)
		quick_select(data, left, pivot -1, k);
	else if (pivot < k)
		quick_select(data, pivot +1, right, k);
}

int main(void) {
	
	int i = 0;
	int data[100];
	int n = 0;
	int k = 0;

	printf("number = ?\n");
	scanf("%d", &n);

	printf("k = ?\n");
	scanf("%d", &k);

	srand(time(NULL));
	for (i = 0; i < n; i++) {
		data[i] = rand()%1000;
	}

	printf("before\n");
	for (i = 0; i < n; i++) {
		printf("%d ", data[i]);
	}
	printf("\n");

	quick_select(data, 0, n-1, k);

	printf("after\n");
	for (i = 0; i < n; i++) {
		printf("%d ", data[i]);
	}
	printf("\n");

	return 0;
}

'Programming > Programmers 알고리즘 문제' 카테고리의 다른 글

structsize  (0) 2019.10.24
arrayshift  (0) 2019.10.24
quicksort  (0) 2019.10.24
지나가다 본 알고리즘 문제 - 택배 박스 문제  (0) 2018.04.16
파이썬 공부  (0) 2018.04.15
Posted by 이미안녕
,