아래 코드는 버블 정렬을 구현하는 데 사용됩니다. 이 경우 템플릿이 사용되는 이유는 무엇입니까? 그리고 swapped
variabe의 목적은 무엇입니까? 내가 루프 코드에서 변수 swapped
및 swapped condition
를 제거하더라도 여전히 잘C++의 버블 정렬 구현
#include <algorithm>
#include <iostream>
#include <iterator>
template <typename RandomAccessIterator>
void bubble_sort(RandomAccessIterator begin, RandomAccessIterator end) {
bool swapped = true;
while (begin != end-- && swapped) {
swapped = false;
for (auto i = begin; i != end; ++i) {
if (*(i + 1) < *i) {
std::iter_swap(i, i + 1);
swapped = true;
}
}
}
}
int main() {
int a[] = {100, 2, 56, 200, -52, 3, 99, 33, 177, -199};
bubble_sort(std::begin(a), std::end(a));
copy(std::begin(a), std::end(a), std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
}
다른 구현을 작동합니다
template<typename Iterator>
void bubbleSort(Iterator first, Iterator last)
{
Iterator i, j;
for (i = first; i != last; i++)
for (j = first; j < i; j++)
if (*i < *j)
std::iter_swap(i, j); // or std::swap(*i, *j);
}
'swapped'변수는 코드를 빠르게 실행합니다. 기본적으로 실행 중에 교환 된 두 값이 있는지 테스트합니다. 아무 것도 없다면 계속 점검 할 필요가 없습니다. 이를 확인하기 위해, 이미 정렬 된 긴 벡터를 생성하고 실행하고 'swapped'변수를 사용하거나 사용하지 않고 시간을 측정하십시오. – rpsml