交换函数返回一个不在我的数组中的数字
Swap function returning a number that is not in my array
我正在用 C 开发一个小的冒泡排序程序。我使用交换函数和指针来完成我的任务,我的程序运行良好。但是,我有一个问题。我的程序 return 是 0(不在数组中)并且 return 不是 9。我很困惑。
我的数组是:int values[] = {7, 3, 9, 4, 6, 1, 2, 8, 5};
我的两个功能是:
void sort(){
int i;
int j;
for(i = 0; i < (sizeof(values)/sizeof(values[0])); i++)
{
for(j = 0; j < (sizeof(values)/sizeof(values[0])); j++)
{
if(values[j] > values[j + 1]){
swap(&values[j], &values[j + 1]);
}
}
}
}// end sort
void swap(int* i, int* j){
int x = *i;
*i = *j;
*j = x;
}//end swap
最后,在 运行 我的程序之后,我得到:
Before:
7 3 9 4 6 1 2 8 5
After:
0 1 2 3 4 5 6 7 8
解决方法是什么?
你的交换函数没问题...问题是你在内部 for
循环中访问了数组边界之外的内容。在那个循环中,你有 j
从 0 到最后一个数组索引,所以 values[j]
最多是数组的最后一个元素......但是,你正在使用 一次两个 个元素,values[j]
和 values[j+1]
... 在最后一次迭代中,values[j+1]
超出范围。
解决办法就是提前停止你的内部循环一次迭代,即:
for(j = 0; j < (sizeof(values)/sizeof(values[0]) - 1); j++){
我正在用 C 开发一个小的冒泡排序程序。我使用交换函数和指针来完成我的任务,我的程序运行良好。但是,我有一个问题。我的程序 return 是 0(不在数组中)并且 return 不是 9。我很困惑。
我的数组是:int values[] = {7, 3, 9, 4, 6, 1, 2, 8, 5};
我的两个功能是:
void sort(){
int i;
int j;
for(i = 0; i < (sizeof(values)/sizeof(values[0])); i++)
{
for(j = 0; j < (sizeof(values)/sizeof(values[0])); j++)
{
if(values[j] > values[j + 1]){
swap(&values[j], &values[j + 1]);
}
}
}
}// end sort
void swap(int* i, int* j){
int x = *i;
*i = *j;
*j = x;
}//end swap
最后,在 运行 我的程序之后,我得到:
Before:
7 3 9 4 6 1 2 8 5
After:
0 1 2 3 4 5 6 7 8
解决方法是什么?
你的交换函数没问题...问题是你在内部 for
循环中访问了数组边界之外的内容。在那个循环中,你有 j
从 0 到最后一个数组索引,所以 values[j]
最多是数组的最后一个元素......但是,你正在使用 一次两个 个元素,values[j]
和 values[j+1]
... 在最后一次迭代中,values[j+1]
超出范围。
解决办法就是提前停止你的内部循环一次迭代,即:
for(j = 0; j < (sizeof(values)/sizeof(values[0]) - 1); j++){