使用向量的选择排序算法
selection sort algorithm using vectors
我正在尝试让选择排序与向量一起工作。我运行了这个程序,它完成了未排序的第一部分,但随后说表达式:矢量下标超出范围。无法找出原因。
#include <iostream>
#include <vector>
using namespace std;
template<typename Comparable>
void selectionSort(vector<Comparable> & toSort)
{
int pos, min, i;
for( pos = 0; pos < 30; ++pos)
{
min = toSort[pos];
for( i = toSort[pos + 1]; i < toSort[30]; ++i)
{
if( i < min)
{
min = i;
}
}
if( min != pos)
{
std::swap(toSort.at(min), toSort.at(pos));
}
}
}
int main(int argc, const char * argv[])
{
const int NUM_ITEMS = 5;
int array[NUM_ITEMS] = { 16, 271, 77, 40, 120 };
vector<int> sortingVector;
for(int i=0;i<NUM_ITEMS;i++) {
sortingVector.push_back(array[i]);
}
cout << "Before sort n";
for(int i=0;i<NUM_ITEMS;i++) {
cout << sortingVector[i] << "n";
}
selectionSort(sortingVector);
cout << "After sort n";
for(int i=0;i<NUM_ITEMS;i++) {
cout << sortingVector[i] << "n";
}
system("pause");
return 0;
}
没有人知道这个神奇的数字30在你的函数中意味着什么
template<typename Comparable>
void selectionSort(vector<Comparable> & toSort)
{
int pos, min, i;
for( pos = 0; pos < 30; ++pos)
{
min = toSort[pos];
for( i = toSort[pos + 1]; i < toSort[30]; ++i)
甚至函数本身也不知道这个神奇的数字30是什么意思。
如果您使用的是标准容器std::vector
,那么它有一个成员函数size
,它总是可以报告容器中有多少元素。
在任何情况下,如果使用size((而不是30,则代码无效,因为内部循环将访问位置等于size((的元素
对于(i=toSort[pos+1];i<to Sort[30] 我认为应该有 此条件 也是无效的,因为您正在比较不同的实体。 该功能可以通过以下方式定义for( i = pos + 1; i < toSor.size(); ++i)
if( min != pos)
template<typename Comparable>
void selectionSort( std::vector<Comparable> & toSort )
{
for ( std::vector<Comparable>::size_type pos = 0; pos < toSort.size(); ++pos )
{
std::vector<Comparable>::size_type min = pos;
for ( std::vector<Comparable>::size_type i = pos + 1; i < toSort.size(); ++i )
{
if ( toSort[i] < toSort[min] ) min = i;
}
if ( min != pos )
{
std::swap( toSort[min], toSort[pos] );
}
}
}
for( pos = 0; pos < 30; ++pos)
{
min = toSort[pos];
如果必须以这种特定的方式进行,那么可以考虑在排序函数中使用NUM_ITEMS
作为范围检查,而不是使用0到29。
for( i = toSort[pos + 1]; i < toSort[30]; ++i)
{
虽然向量只有5个元素,但您在这里直接访问元素30。请务必检查pos + 1
,因为这可能会在以后导致错误。
- C++选择排序算法中的逻辑错误
- 排序算法c++
- 下面是排序算法O(n)吗
- 为什么我的排序算法会更改数组值
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 排序算法问题(购买商店物品)(崩溃)
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- 为什么在此排序算法实现中,向量明显比数组慢?
- C++中合并排序算法的奇怪行为
- 我的排序算法程序中的堆错误
- 如何使用cpp编写选择排序算法以降序对元素列表进行排序?
- 解释一下这个排序算法是如何工作的?
- 快速排序函数在快速排序算法中如何工作?
- 分段故障,合并排序算法
- 这种排序算法已经存在吗?
- 为什么此代码上的排序算法不调用类的交换版本?
- 为什么我的替代排序算法不起作用?
- 选择排序算法生成无序结果
- 递归合并排序算法实现
- 这种快速排序算法有什么问题?