#include <stdio.h>

void reverse(int nums[], int size, int start, int end) {
	while (start < end) {
		int temp = nums[start];
		nums[start] = nums[end];
		nums[end] = temp;
		start++;
		end--;
	}
}

void rotate(int nums[], int size, int k) {

	k = k % size;
	reverse(nums, size, 0, k-1);
	reverse(nums, size, k, size-1);
	reverse(nums, size, 0, size-1);
}


int main() {
	int arr[10] = {0,1,2,3,4,5,6,7,8,9};
	int size = 10;
	int i, j;

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

	// reverse(arr, size, 0, 9);
	rotate(arr, size, 2);

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

	return 0;
}

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

structsize  (0) 2019.10.24
quickselect  (0) 2019.10.24
quicksort  (0) 2019.10.24
지나가다 본 알고리즘 문제 - 택배 박스 문제  (0) 2018.04.16
파이썬 공부  (0) 2018.04.15
Posted by 이미안녕
,
#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 이미안녕
,
#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_sort(int data[], int left, int right) {
	int pivot = 0;
	if (left >= right) {
		return;
	}

	pivot = partition(data, left, right);
	quick_sort(data, left, pivot -1);
	quick_sort(data, pivot +1, right);
}

int main(void) {
	
	int data[10] = {0,2,4,6,8,1,3,5,7,9};
	int n = 10;
	int i = 0;

	quick_sort(data, 0, n-1);

	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
quickselect  (0) 2019.10.24
지나가다 본 알고리즘 문제 - 택배 박스 문제  (0) 2018.04.16
파이썬 공부  (0) 2018.04.15
Posted by 이미안녕
,