본문 바로가기
algorithm

[백준/2751] 수 정렬하기 2

by blogsy 2020. 4. 2.

https://www.acmicpc.net/problem/2751

 

2751번: 수 정렬하기 2

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

#include <iostream>
#include <cstdio>

using namespace std;

int partition(int list[], int left, int right) {
	int low, high, pivot;
	low = left;
	high = right + 1;
	pivot = list[left];
	do {
		do {
			low++;
		} while (low <= right && list[low] < pivot);
		do {
			high--;
		} while (high >= left && list[high] > pivot);
		if (low < high) {
			int temp = list[low];
			list[low] = list[high];
			list[high] = temp;
		}
	} while (low < high);

	int temp = list[left];
	list[left] = list[high];
	list[high] = temp;

	return high;

}

int* quick_sort(int list[], int left, int right) {
	if (left < right) {
		int q = partition(list, left, right);
		quick_sort(list, left, q - 1);
		quick_sort(list, q + 1, right);
	}
	return list;
}


int main() {

	int n;
	cin >> n;
	int *list = new int[n];
	for (int i = 0; i < n; i++) {
		scanf("%d", &list[i]);
	}

	int* tmp_list = quick_sort(list, 0, n-1);
	for (int i = 0; i < n; i++) {
		printf("%d ", list[i]);
	}

	return 0;
}

시간초과라니 

댓글