我嘗試使用for回圈,但它給出了一個錯誤的答案。當我使用 while 回圈來代替它時,排序就如期完成了。誰能幫我除錯一下呢?
注意:它沒有拋出一個編譯錯誤,只是在使用for回圈時給出了一個錯誤的答案。我已經嘗試在不同的 IDE 上運行,甚至嘗試干巴巴地運行 for 回圈,但我無法理解這里的問題。
/While loop。
while(j >= 0 && arr[j] > element)
{
arr[j 1] = arr[j];
j = j - 1;
}
/For loop
for(; j >= 0; j-)
{
if(arr[j] > element)
{
arr[j 1] = arr[j]。
}
}
完整的代碼,如果有人需要的話
using namespace std;
class Solution
{
public:
vector<int> sortArr(vector< int> arr, int n)
{
int i, j, element;
for(i = 1; i < n; i )
{
element = arr[i];
j = i - 1;
while(j >= 0 & & arr[j] > element)
{
arr[j 1] = arr[j];
j = j - 1;
}
/*for( ; j >= 0 ; j--)
{
如果(arr[j] > element){
arr[j 1] = arr[j]。
}
}*/
arr[j 1] = element。
}
return arr;
}
};
int main()
{
vector<int> s(4)。
for(int i = 0; i < 4; i )
{
cin >> s[i];
}
解決方案ob;
vector<int> v = ob.sortArr(s, 4)。
for(auto i : v)
{
cout << i << ' '/span>;
}
cout <<endl;
return 0;
}
uj5u.com熱心網友回復:
你的while和for回圈并不等同。在你的for回圈中,j總是以0結束,因為沒有等同于&& arr[j] > element檢查。這將破壞向量的內容,因為你將覆寫索引0。
相等的for回圈:
for( ; j >= 0 && arr[j] > element; j--)
{
arr[j 1] = arr[j]。
}
uj5u.com熱心網友回復:
兩者并不等同,如果你看一下這個:
while (j >= 0 && arr[j] > element)
{
arr[j 1] = arr[j];
j = j - 1;
}
它在arr[j] > element時就停止了。但這并不是:
for( ; j >= 0; j--)
{
if( arr[j] > element){
arr[j 1] = arr[j]。
}
}
由于它繼續運行超過arr[j] > element。所以等價物將是:
for( ; j >= 0 & & (arr[j] > element) ; j--)
{
arr[j 1] = arr[j]。
}
uj5u.com熱心網友回復:
這些回圈是用不同的邏輯條件寫的break。請看while:
while (j >= 0 && arr[j] > element)
當 現在我們來看看for回圈: 在這種情況下,唯一的條件是值 無論如何,這個回圈將繼續下去,直到 修復你的代碼片段的方法是添加
標籤: 下一篇:vue3中的多層深V模型資料系結
j低于0或者arr[j]低于element時,這個回圈將會中斷。因此,如果你遇到第一個等于/高于arr[j]的element,回圈將會中斷。
for( ; j >= 0 ; j--)
j的倒計時。但是如果你發現element等于/高于arr[j],意味著這將不會被滿足:if(arr[j] > element){
j不低于0。
break指令:for ( ; j >=0; j--) {
if(arr[j] > element) {
arr[j 1] = arr[j]。
} else {
break; //the loop will stop, just like the while loop does.
}
