c++中的冒泡排序函数

Bubble Sorting Function in C++

本文关键字:函数 冒泡排序 c++      更新时间:2023-10-16

不允许引用数组。我知道在c++中这是非法的。但是,还有别的方法吗?我肯定有,但我想不出来。

#include <iostream>
using namespace std;
#define UBound(n)   sizeof(n) / sizeof(n[0]);
void SortArray(int & Arr[]) {
    int ArrayLength;
    ArrayLength = UBound(Arr);
    int Min, Temp;
    for (int i = 0; i = ArrayLength; i++) {
        for (int j = 0; j = ArrayLength; j++) {
            if (Arr[i+1] < Arr[i]){
                Temp = Arr[i+1];
                Arr[i+1] = Arr[i];
                Arr[i] = Temp;
                }
        }
    }
} 
void main() {
    int numArray[9] = { 9, 7, 6, 8, 4, 5, 3, 2, 1 };
    SortArray(numArray);
} 

最终功能:

 template < size_t I >
    void SortArray(int(&Arr)[I]) {
        int Min, Temp;
         for (int i = 0; i < I - 1; i++) {
            for (int j = 0; j < I - 1; j++) {
                if (Arr[j+1] < Arr[j]){
                    Temp = Arr[j+1];
                    Arr[j+1] = Arr[j];
                    Arr[j] = Temp;
                }
            }
        } 
    } 

谢谢大家的回答。

可以使用函数模板(以及对数组的引用,而不是引用数组(注意括号)):

template<size_t ArrayLength>
void SortArray(int (&Arr)[ArrayLength]) {
    ...
}

您的代码有多个问题。让我列出它们

  • using namespace std;——永远不要这样做。
  • #define UBound—首先,您永远不需要这个宏。其次,这个定义有缺陷。
  • SortArray正在尝试接收引用数组。它应该是template <size_t N> void SortArray(int (&Arr)[N])——接收对数组的引用;或void SortArray(int Arr[], size_t len)

有,但不一定要使用:

template < size_t I >
void SortArray(int (&Arr)[I]) {}

现在你可以使用Isizeof Arr报告,如果它是在函数的局部变量堆栈。

你可能不想这样做的原因是每个size数组都会创建一个函数的新副本。可能会导致大量肿胀。

但是我使用这种技术来创建constexpr字符串类型

您可以使用reference_wrapper来模拟引用。这个示例取自http://en.cppreference.com/w/cpp/utility/functional/reference_wrapper,展示了如何使用它来访问具有多个索引的容器。我假设这就是你想要你的sort函数所做的:对引用到另一个容器中的项进行排序。

#include <algorithm>
#include <list>
#include <vector>
#include <iostream>
#include <numeric>
#include <random>
#include <functional>
int main()
{
    std::list<int> l(10);
    std::iota(l.begin(), l.end(), -4);
    std::vector<std::reference_wrapper<int>> v(l.begin(), l.end());
    // can't use shuffle on a list (requires random access), but can use it on a vector
    std::shuffle(v.begin(), v.end(), std::mt19937{std::random_device{}()});
}