简体   繁体   English

选择排序数组

[英]Selection sort array

I was trying to make my program sort the smallest number to the largest using selection sort. 我试图使我的程序使用选择排序将最小的数字排序为最大的数字。 Everything compiles and runs, but the numbers are not in the right order when i try to use the program. 一切都可以编译并运行,但是当我尝试使用该程序时,数字的顺序不正确。

Can you look over my program to see if there is anything i can change to make it run correctly, because i tried everything and its still not showing the numbers in the right order. 您能否查看我的程序以查看是否可以更改任何内容以使其正常运行,因为我尝试了所有操作,但仍未按正确的顺序显示数字。

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

In your index_of_minimal function, you need to reset the current smallest value( first ) for the next comparison along with saving its index, otherwise another number, in your iteration, less that the original first value may still be larger than the ones you've already processed. 在您的index_of_minimal函数中,您需要重置当前的最小值( first )以便进行下一次比较并保存其索引,否则迭代中的另一个数字可能会小于原始的first值,但仍可能大于已经处理。

So it should be like this: 所以应该是这样的:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM