[英]Insertion sort function acts weird C++
我想創建一個函數來對隨機數進行排序(使用另一個函數生成),並且我已經嘗試了一段時間,但是沒有任何效果。 現在,我遇到一個問題,有時我的程序編譯時沒有任何問題,有時會說“向量下標超出范圍”,即使編譯正確,它也會以錯誤的順序插入一些數字(尤其是當下一個要排序的數字小於數字時)。前一個)。 我嘗試使用調試器並找出問題所在,但對我而言一切似乎都很好。 你能這么善良並幫助我嗎? 非常感謝你。
std::vector <int> insertion_sort(std::vector <int> generated)
{
using namespace std;
bool emplaced = false;
vector <int> buffor(1);
buffor[0] = generated[0];
for (int i = 1; i < generated.size(); i++)
{
emplaced = false;
if (generated[i] >= buffor[i-1])
{
buffor.push_back(generated[i]);
}
else
{
int x = 2;
while (((i - x) > -1))
{
if (emplaced == true)
{
break;
}
if ((i - x) == 0)
{
buffor.emplace(buffor.begin(), generated[i]);
emplaced = true;
}
if (generated[i] < bufor[i - x])
{
}
else
{
buffor.emplace(buffor.begin() + (i-x), generated[i]);
emplaced == true;
}
x++;
}
}
}
return buffor;
}
插入排序是一種簡單的排序算法,可以通過更緊湊,更直接的代碼來實現,如下所示:
std::vector<int> insertion_sort(const std::vector<int>& generated)
{
auto shifted(generated);
for (std::size_t j = 1; j < shifted.size(); ++j)
{
const auto temp = shifted[j];
if(shifted[j-1] > temp)
{
int i = j;
do{
shifted[i] = shifted[i-1];
--i;
} while(i > 0 && shifted[i-1] > temp);
shifted[i]=temp;
}
}
return shifted;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.