1. while循环常常忘了变量自增。
2. 字符串快速排序遇到的问题:
我遇到的问题:字符串排序直接调用的是整形数组的快速排序方法。
字符串一个元素是一个字符类型的,只占有一个字节,如果调用的是整形的排序,每个元素是int型,要占用4个字节,对每个元素交换时会破坏元素的结构,可能导致乱码
比如,本来交换一个字节长度的元素,而错误的交换了两个四字节的元素,导致了错误!!
字符串使用快速排序一定要注意排序函数中输入字符串的类型!!
3. 交换两个数时引入了中间变量,这个错误容易在排序时出现!
char a[]="abca";
char temp;
temp=a[0];
swap(&a[1],&temp);
puts(a);
输出的是aaca;
为什么呢?因为交换的是temp和a[1];而不是用a[0]与a[1]交换;
交换后,temp=a[1]=b; a[1]=temp=a; a[0]并没有改变!
在选择排序中,
void SelectSort2(char *s, int n)
{
int i,j,k;
char temp;
for(i=0;i<n-1;i++)
{
temp = s[i];
k = i + 1;
for(j=i+2; j<n; j++)
if(s[j]<s[k])
k=j;
if(s[k]<s[i])
{
swap(&s[k],&temp);
}
}
}
以上代码因为在交换过程中引入了中间变量,不能达到交换s数组的效果;
应该把temp变量去掉,并改为swap(&s[k],&s[i]);
4.
printf("%.1lf\n",100);
输出的是0.0