C++ 퀵 정렬

야민·2023년 3월 30일
1

ToSWAP

void ToSWAP(int& a, int& b) {
	int t = a;
	a = b;
	b = t;
}

퀵정렬 1

void quickSort(int* data, int start, int end)
{
	if (start >= end) return;
	int pivot = start;  // 기준 값
	int i = start + 1;
	int j = end;

	while (i <= j)
	{
		// 와일로 이동
		// 키 값보다 큰 값 만날때까지 오른쪽으로 이동
		while (data[i] <= data[pivot]) i++;

		// 와일로 이동
		// 키 값보다 작은 값 만날 때까지 왼쪽으로 이동
		while (data[j] >= data[pivot] && j > start) j--;

		// 커서를 이동 완료한 상태에서 현재 상태 검증
		//현재 엇갈린 상태면 현재 값에서 정렬이 완료된 상태로 pivot 값 교체
		if (i > j) ToSWAP(data[pivot], data[j]);

		// 연재 값을 바꿔야 하는 상황
		else ToSWAP(data[j], data[i]);

		// 재귀 호출을 하고
		quickSort(data, start, j - 1);
		quickSort(data, j + 1, end);
	}
}

퀵정렬 2

void quickSort2(int* data, int start, int end) 
{
	if (start >= end) return;

	int pivot, front, last, tmp;

	pivot = start;
	front = start + 1;
	last = end;

	while (front <= last)
	{
		while (data[front] <= data[pivot] && front <= end) front++;
		while (data[last] > data[pivot] && last >= start) last--;

		if (front > last) break;
		else ToSWAP(data[front], data[last]);
	}
	ToSWAP(data[last], data[pivot]);

	quickSort2(data, start, last - 1);
	quickSort2(data, last + 1, end);
}

0개의 댓글