gpt4 book ai didi

c++ - 选择排序数组

转载 作者:行者123 更新时间:2023-11-28 05:42:56 27 4
gpt4 key购买 nike

我试图让我的程序使用选择排序将最小的数字排序到最大的数字。一切都编译并运行,但当我尝试使用该程序时,数字的顺序不正确。

你能不能检查一下我的程序,看看是否有什么我可以更改以使其正常运行,因为我尝试了所有的方法,但它仍然没有以正确的顺序显示数字。

#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
}
}

关于c++ - 选择排序数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36782185/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com