Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Swap(int *xp, int *yp)
- {
- int temp = *xp;
- *xp = *yp;
- *yp = temp;
- }
- void ShellSort(int *a, int n)
- {
- int i;
- int value;
- for (int p = n / 2; p >= 0; p--)
- {
- for (int q = 0; q < p; q++)
- {
- for (int j = q + p; j < n; j += p)
- {
- for (i = j - p, value = a[j]; i >= 0 && a[i] > value; i -= p)
- {
- a[i + p] = a[i];
- }
- a[i + p] = value;
- }
- }
- }
- }
- void MoveElement(int *a, int n, int index)
- {
- int j = 2 * index + 1;
- if (j > n)
- return;
- int value = a[index];
- int i = index;
- if (a[j + 1] > a[j] && j + 1 < n)
- {
- j++;
- }
- while (a[j] > value)
- {
- a[i] = a[j];
- i = j;
- j = 2 * i + 1;
- if (j >= n)
- {
- break;
- }
- if (j + 1 < n && a[j + 1] > a[j])
- {
- j++;
- }
- }
- a[i] = value;
- }
- void BuildPyramid(int *a, int n)
- {
- for (int curentIndex = n / 2 - 1; curentIndex >= 0; curentIndex--)
- {
- MoveElement(a, n, curentIndex);
- }
- }
- void PyramidSort(int *a, int n)
- {
- BuildPyramid(a, n);
- for (int N = n; N > 0; )
- {
- Swap(&a[0], &a[N - 1]);
- N--;
- MoveElement(a, N, 0);
- //BuildPyramid(a, N);
- }
- Swap(&a[0], &a[1]);
- }
- void BubbleSort(int *a, int n, int start, int end)
- {
- int i, j;
- bool isSwapped;
- for (i = start; i < end - 1; i++)
- {
- isSwapped = false;
- for (j = 0; j < n - i - 1; j++)
- {
- if (a[j] > a[j + 1])
- {
- Swap(&a[j], &a[j + 1]);
- isSwapped = true;
- }
- }
- if (isSwapped == false)
- break;
- }
- }
- void QuickSort(int *a, int n, int start, int end)
- {
- int i = start;
- int j = end;
- int pillar = a[(end + start) / 2];
- while(i < j)
- {
- for (; a[i] < pillar && i <= end; i++);
- for (; a[j] > pillar && j >= start; j--);
- if (i <= j)
- {
- Swap(&a[i], &a[j]);
- i++;
- j--;
- }
- }
- if (start < j)
- {
- QuickSort(a, n, start, j);
- }
- if (end > i)
- {
- QuickSort(a, n, i, end);
- }
- }
- void PrintArray(int *a, int n, int mask)
- {
- std::cout << "Mask: \n" << std::bitset<4>(mask) << "\n\n";
- for (int i = 0; i < n; i++)
- {
- std::cout << std::bitset<4>( a[i]);
- std::cout << '\n';
- }
- std::cout << '\n';
- }
- void ByteSort(int *a, int n, int start, int end, int cmpByte)
- {
- int i = start;
- int j = end;
- if (i <= j)
- {
- int mask = 1 << cmpByte;
- if (mask <= 16)
- {
- PrintArray(a, n, mask);
- }
- while (i <= j)
- {
- for (; i < j && (a[i] & mask); i++);
- for (; i < j && !(a[j] & mask); j--);
- if (i <= j)
- {
- std::cout << "Swap " << a[i] << " and " << a[j] << '\n';
- Swap(&a[i], &a[j]);
- i++;
- j--;
- }
- }
- if (start < j)
- {
- ByteSort(a, n, start, j, cmpByte - 1);
- }
- if (i < end)
- {
- ByteSort(a, n, i, end, cmpByte - 1);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement