交换函数返回不在我的数组中的数字

And*_*y C 1 c arrays swap pointers

我正在使用C中的一个小冒泡排序程序.我正在使用交换函数和指针来完成我的任务,我的程序运行正常.但是,我有一个问题.我的程序返回0(不在数组中)并且不返回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
Run Code Online (Sandbox Code Playgroud)

最后,在运行我的程序后,我得到:

Before:
7 3 9 4 6 1 2 8 5
After:
0 1 2 3 4 5 6 7 8
Run Code Online (Sandbox Code Playgroud)

解决办法是什么?

Dmi*_*tri 6

你的交换函数很好......问题是你在内部for循环中的数组边界之外访问.在该循环中,您的j范围从0到最后一个数组索引,因此values[j]最多只是数组的最后一个元素...但是,您一次只处理两个元素,values[j]并且values[j+1]...最后一个元素迭代,values[j+1]超出范围.

解决方案只是提前停止一次迭代,即:

    for(j = 0; j < (sizeof(values)/sizeof(values[0]) - 1); j++){
Run Code Online (Sandbox Code Playgroud)