69,382
社区成员
发帖
与我相关
我的任务
分享
char a[]="iopwerqefgabcd";
int n;
#define swap(a,b) do{a^=b;b^=a;a^=b;}while(0)
void sort()
{
do{
for(n =0;n< strlen(a)-1;n++)
{
if(a[n]< a[n+1])
swap(a[n],a[n+1]);
}
for(n =0;n< strlen(a)-1;n++){
if(a[n]<a[n+1])break;
}
//printf("n= %d",n);
if(n >= strlen(a)-1){
for(n= strlen(a)-1;n>=0;n--){
printf("%c",a[n]);
a[n]='\0';
}
}
}
while(strlen(a)>0);
}
if(a[n]||a[n+1]) return;//这鼐逻辑写错了
改为
if(!a[n+1]) return; //当a[n+1]为'\0'时退出
char a[]="abcdiopwerqefgabcd";
int n;
sort()
{
while(1)
{//这是一个死循环,唯一满足退出的条件就是遍历一次后,没有发生交换的情况。否则,一直冒泡下去。
n=0;
while(a[n]&&a[n+1])//这个while遍历一次,以确认是否还需要冒泡;
{
if(a[n]>a[n+1])break;
n++;
}
if(a[n]||a[n+1]) return;//n到了数组尾,说明没有需要交换的了。可以退出。
else
{//还有需要交换的情况,则进行一次冒泡。
n=0;
while(a[n]&&a[n+1])
{//这个while循环完成一次冒泡
if(a[n]>a[n+1])
{//交换
a[n] =a[n]^a[n+1];
a[n+1]=a[n]^a[n+1];
a[n] =a[n]^a[n+1];
}
n++;
}
}
}
}
呵呵,我的代码怎么样?连一个strlen也没有用到,没有形参,没有递归调用。啦啦,哈哈
void swap(char &a, char &b)
{
a ^= b;
b ^= a;
a ^= b;
}
void asc2(char *s)
{
if(*s && *(s + 1))
{
asc2(s + 1);
while(*(s + 1))
{
if(*s > *(s + 1))
swap(*s, *(s + 1));
++s;
}
}
}
看了下。。有人说n是常量。。所以重写了一个。。//除了数组a, 程序里,没额外定义任何变量
//只是借用一些,库里的外部变量,这个算没定义变量么???
#include<stdlib.h>
char a[] = "abcdiopwerqefgabcd";
#define n (sizeof(a)/sizof(a[0])-1) //常量 n
void sort_str()
{
//_asm push errno
do{
for(errno=0;errno< n;errno++)
{
if(a[errno]>a[errno+1])
swap(a[errno],a[errno+1]);
}
for(errno =0;errno< n-1;errno++){
if(a[errno]>a[errno+1])break;
}
}while(errno < n - 1 );
//_asm pop errno
// printf("%s",a);
}
#include <stdio.h>
#include <string.h>
#define N strlen(a)
void swap(char* a, char* b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
void sort_str(char str[],int len)
{
len=0;
while (len < strlen(str))
{
if (len == 0 || str[len - 1] <= str[len])
{
len++;
}
else
{
swap(str+len,str+len - 1);
len--;
}
}
}
int main()
{
char a[]="abcdiopwerqefgabcd";
sort_str(a,N);
puts(a);
return 0;
}
void swap(char &a, char &b)
{
a ^= b;
b ^= a;
a ^= b;
}
void sort(char str[],int len)
{
len=0;
while (len < strlen(str))
{
if (len == 0 || str[len - 1] <= str[i])
{
len++;
}
else
{
swap(str+i,str+i - 1]);
len--;
}
}
}