C++代码的困惑需要解释[关闭]

lymnna71  于 2023-10-21  发布在  其他
关注(0)|答案(1)|浏览(95)

已关闭,此问题需要details or clarity。它目前不接受回答。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

5天前关闭。
Improve this question

#include <iostream>

void sort(int array[], int size);

int main()
{
    int array[] = {10, 1, 9, 2, 8, 3, 7, 4, 6, 5};
    int size = sizeof(array)/sizeof(array[0]);

    sort(array, size);

    for(int element : array){ 
        std::cout << element << " ";
    }
    return 0;
}

void sort(int array[], int size){

    int temp;

    for(int i = 0; i < size - 1; i++){
        for(int j = 0; j < size - i - 1; j++){
            if(array[j] > array[j + 1]){ 
                temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }
}

我现在正在看C++教程,我只是不明白这一部分:

for(int j = 0; j < size - i - 1; j++){
    if(array[j] > array[j + 1]){ 
        temp = array[j];
        array[j] = array[j+1];
        array[j+1] = temp;

有人能解释一下size - i - 1j+1的用途吗?我有点笨,所以我现在不明白。
我试着去理解它,但变得更加困惑。

ldioqlga

ldioqlga1#

size - i -1是因为这是冒泡排序的一个实现,并且不需要检查最后一个元素,因为它在之前的循环中“冒泡”到表面,因此处理它只是一个冗余和无用的操作,因此j循环忽略了最后的i-1成员,因为它们总是在正确的位置。
同时,j+1是因为循环在数组的j位置和下一个位置之间进行检查,以查看哪个更大,因此需要“冒泡”。

相关问题