안녕지구 #developer #bompapa

소소한팁 - 원하는 개수 만큼만 정렬하기 1

|

입력을 받으면서 최대 n개 만큼만 정렬이 필요한 경우가 있습니다. 이런 경우 n+1 크기 만큼 배열을 만들고, 마지막 index 를 버퍼로 사용하면 구현할 수 있습니다. 배열의 마지막 index 에 새로운 값을 넣고 맞는 위치를 찾아서 삽입하면 됩니다. 삽입정렬과 유사한 방식입니다.

예제에서는 배열에 들어간 값이 0개일 때는 0번 index 에 넣고, 이후에는 배열의 처음 빈 위치를 버퍼로 사용합니다. n개까지 입력이 주어지면 그 뒤로는 n+1 번째 index 를 버퍼로 사용합니다.

n개만 입력하면서 정렬하기

#include <iostream>

#define SORT_NUM 5

int sample_arr[SORT_NUM + 1];

int data_num = 0;
void insert(int* arr, int data, int size) {
	int idx = size - 1;
	for (; idx >= 0; idx--) {
		if (arr[idx] < data) {
			arr[idx + 1] = arr[idx];
		} else {
			break;
		}
	}
	arr[idx + 1] = data;

	// 최대 SORT_NUM 까지만 증가시킵니다.
	if (data_num < SORT_NUM) data_num++;
}

int main() {

	int sort_num = SORT_NUM;

	insert(sample_arr, 5, data_num);
	insert(sample_arr, 3, data_num);
	insert(sample_arr, 8, data_num);
	insert(sample_arr, 6, data_num);
	insert(sample_arr, 2, data_num);
	insert(sample_arr, 4, data_num);
	insert(sample_arr, 9, data_num);
	insert(sample_arr, 7, data_num);
	insert(sample_arr, 1, data_num);

	for (int i = 0; i < sort_num; i++) {
		printf("%d ", sample_arr[i]);
	}

}

출력

1 2 3 4 5

Comments