64,654
社区成员
发帖
与我相关
我的任务
分享
void mySort()
{
int i,j,min;
char temp;
char cs[7]={'F','a','f','h','A','g','K'};
for (i=0;i<7;i++) //先按ASCII排序,大写字母在前,小写字母在后
{
for(j=i+1;j<7;j++)
{
if (cs[i]>cs[j])
{
temp = cs[i];
cs[i] = cs[j];
cs[j] = temp;
}
}
}
for (i=0;i<7;i++) //找到第一个小写字母的位置
{
if (cs[i]>=97)
{
min= i;
break;
}
}
while (min<7)//把小写字母插入适当的位置
{
for (i=0;i<min-1;i++)
{
if (cs[min]>=tolower(cs[i]) && cs[min]<tolower(cs[i+1]))
{
temp = cs[min];
for (j=min;j>i+1;j--)
{
cs[j]=cs[j-1];
}
cs[i+1] = temp;
}
}
min++;
}
for (i=0;i<7;++i)
{
cout<<cs[i];
}
cout << endl;
}
//返回值0、-1、1分别对应 等于 小于 大于
int CmpChar(char ch1, char ch2)
{
assert((ch1>='a' && ch1<='z' || ch1>='A' && ch1<='Z')
&& (ch2>='a' && ch2<='z' || ch2>='A' && ch2<='Z'));
if (ch1 == ch2)
return 0;
if(ch1 >= 'A' && ch1 <= 'Z')
{
if(ch2 >= 'a' && ch2 <= 'z')
ch2 -= 'a' - 'A';
if (ch1 <= ch2) //这里如果ch1 == ch2, 说明ch1和原始的ch2是同一个字母,且ch1为大写,ch2为小写
return -1;
else
return 1;
}
else
{
if(ch2 >= 'A' && ch2 <= 'Z')
ch2 += 'a' - 'A';
if (ch1 >= ch2)
return 1;
else
return -1;
}
}
//一个普通的排序方法
void sort(char * arr, int len)
{
int i, j;
char tmp;
for (i=0; i<len; i++)
{
for (j=i+1; j<len; j++)
{
if (CmpChar(arr[j], arr[i]) < 0)//(arr[j] < arr[i]) 注意这里替换
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
int main(int argc,char*argv[])
{
char arr[] = {'F','a','f','h','A','g','K'};
int len = sizeof(arr) / sizeof(char);
sort(arr, len);
//OutPut
char *pTmp = new char[len+1];
strncpy(pTmp, arr, len);
pTmp[len] = '\0';
printf(pTmp);
delete [] pTmp;
}
void insertsort(const char* s,char* d)
{
memset(d,0,strlen(d));
memcpy(d,s,strlen(s));
for(int i=1;i<strlen(s);i++)
{
char tmp=d[i];
int j=i;
for(;j>0&&(tmp>96?tmp-32:tmp)<(d[j-1]>96?d[j-1]-32:d[j-1])?true:((tmp>96?tmp-32:tmp)==(d[j-1]>96?d[j-1]-32:d[j-1])?(tmp<d[j-1]?true:false):false);j--)
{
d[j]=d[j-1];
}
d[j]=tmp;
}
}
// C
int compare(const void * a, const void * b)
{
return *(char *)a - *(char *)b;
}
char a[7] = { F, a, f, h, A, g, K, };
qsort(a, 7, sizeof(char), compare);
// C++
char a[7] = { F, a, f, h, A, g, K, };
sort(a, a + 7);
void sort(const char* s,char* d)
{
memset(d,0,strlen(d));
memcpy(d,s,strlen(s));
while(*d)
{
char*p=d+1;
while(*p)
{
char d1=*d;
if(d1>96)
{
d1=d1-32;
}
char p1=*p;
if(p1>96)
{
p1=p1-32;
}
if(d1>p1)
{
char c=*d;
*d=*p;
*p=c;
}
else if(d1==p1)
{
if(*d>*p)
{
char c=*d;
*d=*p;
*p=c;
}
}
else
{
}
p++;
}
d++;
}
}