Sorting algorithms/Gnome sort: Difference between revisions
Content added Content deleted
m (→{{header|C++}}) |
|||
Line 295: | Line 295: | ||
=={{header|C++}}== |
=={{header|C++}}== |
||
Uses C++11. Compile with |
|||
'''Compiler:''' [[g++]] (version 4.3.2 20081105 (Red Hat 4.3.2-7)) |
|||
g++ -std=c++11 gnome.cpp |
|||
<lang cpp>#include <algorithm> |
<lang cpp>#include <algorithm> |
||
#include <iterator> |
#include <iterator> |
||
#include <iostream> |
|||
template<typename RandomAccessIterator> |
template<typename RandomAccessIterator> |
||
void |
void gnome_sort(RandomAccessIterator begin, RandomAccessIterator end) { |
||
auto i = begin + 1; |
|||
auto j = begin + 2; |
|||
while(i < end) { |
while (i < end) { |
||
if(*(i - 1) |
if (!(*i < *(i - 1))) { |
||
i = j; |
i = j; |
||
++j; |
++j; |
||
Line 312: | Line 313: | ||
std::iter_swap(i - 1, i); |
std::iter_swap(i - 1, i); |
||
--i; |
--i; |
||
if(i == begin) { |
if (i == begin) { |
||
i = j; |
i = j; |
||
++j; |
++j; |
||
Line 318: | Line 319: | ||
} |
} |
||
} |
} |
||
} |
|||
int main() { |
|||
int a[] = {100, 2, 56, 200, -52, 3, 99, 33, 177, -199}; |
|||
gnome_sort(std::begin(a), std::end(a)); |
|||
copy(std::begin(a), std::end(a), std::ostream_iterator<int>(std::cout, " ")); |
|||
std::cout << "\n"; |
|||
}</lang> |
}</lang> |
||
Output: |
|||
<pre> |
|||
-199 -52 2 3 33 56 99 100 177 200 |
|||
</pre> |
|||
=={{header|Clojure}}== |
=={{header|Clojure}}== |