标签:字符串排序
/*
一个字符数组,里面的字符可能是a - z、A - Z、0 - 9.
现在要求对数组进行排序,要求所有小写字符放在最前面,
所有大写字符放在中间,所有数字放在最后,而且各部分
内部分别有序。
*/
#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)
{
//因为a-z对应的ASCLL表中的值是大于A-Z,A-Z又大于
//0-9,所以先让整体排列成z-aZ-A9-0的形式,然后局部翻转,
//达到最终的结果。
//选择快排使它有序。
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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:字符串排序
原文地址:http://blog.csdn.net/liuhuiyan_2014/article/details/47187859