【发布时间】:2021-03-08 13:58:09
【问题描述】:
在理解了逻辑之后,我自己为选择排序实现了这段代码。您可以清楚地看到我使用 C++ STL 的min_element() 来查找数组中的最小元素。但是输出完全错误。似乎forward iterator first 的min_element() 没有迭代。有人可以帮我找到潜在的问题。提前致谢!
#include<iostream>
#include<algorithm>
using namespace std;
void Swap(int &a,int &b){
a=a+b;
b=a-b;
a=a-b;
}
void SelectionSort(int arr[],int n){
int Min;
for(int i=0;i<n-1;i++){
Min=*min_element(arr+i,arr+n);
Swap(arr[i],Min);
}
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
}
int main(){
int arr[]={64, 25, 12, 22, 11};
int n=sizeof(arr)/sizeof(arr[0]);
SelectionSort(arr,n);
return 0;
}
输出:
11 11 11 11 11
【问题讨论】:
-
想想
Swap(arr[i],Min);做了什么。那是交换数组元素吗? -
另外,您有时会将相同的元素传递给
Swap,这是错误的。此外,您根本没有实现 selection_sort。 -
您是否尝试过将
arr初始化为{11, 22, 12, 25, 64}?这种情况下的结果是错误的,但并非完全错误,它表明您实际上将第一个参数更新为min_element。 (不,这不是答案,只是对您的“似乎”假设的测试。) -
您知道您的“聪明”交换很可能比带有第三个变量的明显交换慢得多吗?
标签: c++ algorithm c++11 stl selection-sort