簡體   English   中英

C ++中的冒泡排序功能

[英]Bubble Sorting Function in C++

不允許使用參考數組。 我知道在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]) {}

現在,您將可以使用I並且sizeof Arr會報告,就好像它在函數的局部變量堆棧中一樣。

您可能不想這樣做的原因是,每個大小數組都會創建該函數的新副本。 可能會導致巨大的膨脹。

但是我使用這種技術制作了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{}()});
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM