對 C 來說真的很新,試圖用它來實體化一些基本演算法。無法為選擇排序回傳正確的結果。這是我的代碼
#include <iostream>
#include <array>
#include <vector>
using namespace std;
// Selection Sort :
int findMin(vector<int> &arr, int a)
{
int m = a;
for (int i = a 1; i < arr.size(); i )
{
if (arr[i] < arr[m])
{
m = i;
}
return m;
}
}
void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
void selectionSort(vector<int> &arr)
{
if (!arr.empty())
{
for (int i = 0; i < arr.size(); i)
{
int min = findMin(arr, i);
swap(arr[i], arr[min]); // Assume a correct swap function
}
}
}
void print(vector<int> &arr)
{
if (!arr.empty())
{
for (int i = 0; i < arr.size(); i )
{
cout << arr[i] << "";
cout << endl;
}
}
}
int main()
{
vector<int> sort;
sort.push_back(2);
sort.push_back(1);
sort.push_back(7);
sort.push_back(4);
sort.push_back(5);
sort.push_back(3);
print(sort);
cout << "this was unsorted array";
cout << endl;
cout << findMin(sort, 0);
cout << "this was minimum";
cout << endl;
selectionSort(sort);
print(sort);
}
我得到以下結果:
comparison_sort.cpp:20:1: warning: non-void function does not return a value in all control paths [-Wreturn-type]
}
^
1 warning generated.
2
1
7
4
5
3
this was unsorted array
1
this was minimum
1
2
4
5
3
0
我的問題是:是什么導致了這個控制路徑錯誤?為什么這里的“7”被替換為“0”?
提前致謝!對不起菜鳥問題。
我已經查看了我當前的所有函式,但似乎沒有任何東西可以解釋為什么 7 被 0 替換。我嘗試了多個整數,看起來最大數字總是被替換。
uj5u.com熱心網友回復:
警告是非常真實的,它也暗示了正在破壞你的排序的問題。
您當前正在m回圈體內回傳。這意味著如果進入回圈,那么函式將m在回圈周圍第一次回傳。它只有機會檢查第一個元素。
當然,如果a是陣列的最后一個索引,那么回圈將永遠不會執行,并且您永遠不會顯式回傳值。這是不回傳值的“控制路徑”。
很明顯,你不小心放return m;錯了地方,即使你有很好的代碼縮進,一些莫名其妙的力量在阻止你看到這一點。要修復警告和排序問題,請移出return m;回圈:
int findMin(vector<int> &arr, int a)
{
int m = a;
for (int i = a 1; i < arr.size(); i )
{
if (arr[i] < arr[m])
{
m = i;
}
}
return m;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/452491.html
