안녕지구 #developer #bompapa

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

|

알고리즘 문제를 풀다 보면 출력할 때 우선순위에 따라서 정렬된 n개만큼만 필요할 때가 있습니다. 이럴 때 배열의 모든 요소를 다 정렬하지 않고 필요한 n개만큼만 정렬하면 시간을 아낄 수 있습니다. 간단하게 선택정렬 을 약간만 변경해서 구현할 수 있습니다.

정렬하려는 개수가 sort_num 개 라면 밖의 순회 범위를 i < sort_num 까지 지정해야 합니다.

n개만 정렬하기

int sample_arr[10] = { 5,4,2,1,8,3,0,6,9,7 };

int main() {
	
	int total_num = 10;
	int sort_num = 5;

	for (int i = 0; i < sort_num; i++) {
		for (int j = i + 1; j < total_num; j++) {
			if (sample_arr[i] > sample_arr[j]) {
				int temp = sample_arr[j];
				sample_arr[j] = sample_arr[i];
				sample_arr[i] = temp;
			}
		}
	}

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

}

출력

0 1 2 3 4 8 5 6 9 7

전체 정렬하기

int sample_arr[10] = { 5,4,2,1,8,3,0,6,9,7 };

int main() {
	
	int total_num = 10;

	for (int i = 0; i < total_num - 1; i++) {
		for (int j = i + 1; j < total_num; j++) {
			if (sample_arr[i] > sample_arr[j]) {
				int temp = sample_arr[j];
				sample_arr[j] = sample_arr[i];
				sample_arr[i] = temp;
			}
		}
	}

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

}

출력

0 1 2 3 4 5 6 7 8 9

Comments