새소식

💻 Programming (프로그래밍)/C++

[C++][구현] 정렬 Sort (순차, 버블)

  • -

STL 형식으로 compare 함수까지 사용 할 수 있도록, 간단히 만들어보려고 합니다.

 

 

순차 정렬

template <typename T1, typename T2> void sort(T1* x, int n, T2 cmp ) {
	for (int i = 0; i < n; i++) {
		for (int j = i; j < n; j++) {
			if (cmp(x[i], x[j])) {
				T1 tmp = x[i];
				x[i] = x[j];
				x[j] = tmp;
			}
		}
	}
}
int main()
{

	int arr[] = { -1, 5, 7, 4, 3, -2, -3 };

	sort(arr, 7, [](int a, int b) {return a > b; });  // Ascending
	for (auto i : arr) cout << i << " ";
	
	sort(arr, 7, [](int a, int b) {return a > b; });  // descendingscending
	for (auto i : arr) cout << i << " ";
	

}

 

제너릭하게 이용할 수 있도록, compare 함수를 람다식으로 사용하여 사용했습니다.

 

 

 

 

버블 정렬

template <typename T1, typename T2> void sort(T1* x, int n, T2 cmp) {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n-i -1; j++) {
			if (cmp(x[j], x[j+1])) {
				T1 tmp = x[j];
				x[j] = x[j+1];
				x[j+1] = tmp;
			}
		}
	}
}

버블정렬도 비슷하게 compare 함수 느낌으로 구현합니다.

 


 

 

 

이러한 정렬을 다른 컨테이너도 쓸 수 있게 더 제너릭하게 만들고싶다면!!

template <typename T1, typename T2> void sort(T1 begin, T1 end, T2 cmp) {
	for (auto i = begin; i != end; i++) {
		for (auto j = i; j != end ; j++) {
			if (cmp(*i, *j)) {
				auto tmp = *i;
				*i = *j;
				*j = tmp;
			}
		}
	}
}


int main()
{

	int arr[] = { -1, 5, 7, 4, 3, -2, -3 };

	sort(arr, arr +7, [](int a, int b) {return a > b; });  // Ascending
	for (auto i : arr) cout << i << " ";
	
	cout << endl;
	
	sort(arr, arr +7, [](int a, int b) {return a < b; });  // Descending
	for (auto i : arr) cout << i << " ";
	

}

이런식으로 범위를 정해준다면, 대부분의 컨테이너 STL도 정렬을 사용할 수 있게 됩니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.