C++ 函数 数组 升序排列 指针

img


我在冒泡排序的函数里试着没有传递数组长度,而是在这个函数里用sizeof直接求出长度,如第二行所示,为什么结果不正确 如下图所示,没有得到正确的排序?

img

传入的参数是一个指针,不是原数组,所以求出的len不对

数组在传参时会自动退化成指针,导致sizeof(arr)的结果实际上是指针的长度。
可以使用模板引用传递数组。

template<size_t size>
void sort(int (&arr)[size])
{
   //在这里贴上代码
}

img


改成这样写试试int len = (int)sizeof(arr)/sizeof( * arr);
附:个人实现冒泡排序的代码:

//编码及注释:Code_流苏
#include <stdio.h>
//冒泡排序
void Bubble_sort(int a[], int len) 
{
        int i, j, temp;
        for (i = 0; i < len - 1; i++)
                for (j = 0; j < len - 1 - i; j++)
                        // > 为升序排序 如果是降序排序用 <
                        if (a[j] > a[j + 1]) {
                                //通过中间变量的赋值实现位置的交换
                                temp = a[j];      
                                a[j] = a[j + 1];
                                a[j + 1] = temp;
                        }
}
//主函数
int main() 
{
        int a[] = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
        int len = (int)sizeof(a)/sizeof(*a);
        //调用冒泡排序函数进行排序
        Bubble_sort(a, len);
        int i;
        //循环输出排序后的结果:
        for (i = 0; i < len; i++)
            printf("%d ", a[i]);
        return 0;
}

希望对题主有所帮助!可以的话,帮忙点个采纳!