#include <iostream>
#include <string.h>
using namespace std;
void Swap(char &a, char &b)
{
char temp = a;
a = b;
b = temp;
}
void Grial(char *&str, int low, int high)
{
if (low >= high)
return;
int i = low - 1;
int j = low;
while (j < high)
{
while (str[high]>str[j])j++;
i++;
if (i != j)
Swap(str[i], str[j]);
j++;
}
i++;
if (i != high)
Swap(str[i], str[high]);
Grial(str, low, i - 1);
Grial(str, i + 1, high);
}
void Swap(char *p1, char *p2)
{
while (p1 < p2)
{
Swap(*p1, *p2);
p1++;
p2--;
}
}
void Grial(char *&str)
{
int n = strlen(str) - 1;
Grial(str, 0, n);
char *p = str;
while (*p>=97)
{
p++;
}
char *q = p;
Swap(str,p-1);
while (*q < 97 && *q >= 65)
{
q++;
}
Swap(p,q-1);
p = q;
while (*(q+1) != '\0')
{
q++;
}
Swap(p,q);
}
int main()
{
char *s = new char[100];
strcpy(s, "1321312796543aDAAABBBBDDDDacdddccaa");
cout << s << endl;
Grial(s);
cout << s << endl;
return 0;
}
