кто может помочь с методом шейкера
0,65,-12,4,78,-9,-44,63,7,22
Ответы
Вот пример реализации шейкерной сортировки на C++:
#include <iostream>
#include <algorithm>
using namespace std;
void shuffleSort(int *arr, int n)
{
bool swapped = true;
int start = 0;
int end = n - 1;
while (swapped)
{
swapped = false;
for (int i = start; i < end; ++i)
{
if (arr[i] > arr[i + 1])
{
swap(arr[i], arr[i + 1]);
swapped = true;
}
}
if (!swapped)
break;
swapped = false;
--end;
for (int i = end - 1; i >= start; --i)
{
if (arr[i] > arr[i + 1])
{
swap(arr[i], arr[i + 1]);
swapped = true;
}
}
++start;
}
}
int main()
{
int arr[] = {5, 1, 4, 2, 8};
int n = sizeof(arr) / sizeof(arr[0]);
shuffleSort(arr, n);
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
А вот пример реализации шейкерной сортировки на Python:
def shuffle_sort(arr):
n = len(arr)
swapped = True
start = 0
end = n - 1
while swapped:
swapped = False
for i in range(start, end):
if arr[i] > arr[i + 1]:
arr[i], arr[i + 1] = arr[i + 1], arr[i]
swapped = True
if not swapped:
break
swapped = False
end -= 1
for i in range(end - 1, start - 1, -1):
if arr[i] > arr[i + 1]:
arr[i], arr[i + 1] = arr[i + 1], arr[i]
swapped = True
start += 1
arr = [5, 1, 4, 2, 8]
shuffle_sort(arr)
print(arr)