[英]Selection sort array
我试图使我的程序使用选择排序将最小的数字排序为最大的数字。 一切都可以编译并运行,但是当我尝试使用该程序时,数字的顺序不正确。
您能否查看我的程序以查看是否可以更改任何内容以使其正常运行,因为我尝试了所有操作,但仍未按正确的顺序显示数字。
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
void makearray(int data[],int n)
{
for ( int i =0 ; i < n ; i++)
data[i]=(1+rand()%(1000-1+1));
}
template <class item, class sizetype>
int index_of_minimal(const item data[],sizetype i, sizetype n)
{
int index=i;
int first=data[i];
for (i; i < n; i++)
{
if (data[i] < first)
index = i;
}
return index;
}
template <class item, class sizetype>
void swap(item data[],sizetype i, sizetype j)
{
int temp;
temp=data[i];
data[i]=data[j];
data[j]=temp;
}
template <class item, class sizetype>
void selectionsort(item data[], sizetype n)
{
int j;
for(int i=0; i< n-1; i++)
{
j=index_of_minimal(data,i,n);
swap(data,i,j);
}
}
int main()
{
int n;
cout << "Enter n: " ;
cin>>n;
int data[n];
makearray(data,n);
cout << "unsorted array: " ;
for(int i = 0; i < n; i++)
cout << data[i] << " ";
cout << endl;
selectionsort(data, n);
cout << "sorted array: " ;
for(int i = 0; i < n; i++)
cout << data[i] << " ";
cout << endl;
return 0;
}
在您的index_of_minimal
函数中,您需要重置当前的最小值( first
)以便进行下一次比较并保存其索引,否则迭代中的另一个数字可能会小于原始的first
值,但仍可能大于已经处理。
所以应该是这样的:
for (i; i < n; i++)
{
if (data[i] < first)
{
index = i;
first=data[i];//also save the new minimum value
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.