#include <iostream>
using namespace std;
// Selection Sort function.
// Parameter 'a' is the size of the array.
void ss(int AR[] , int a) {
int small;
for (int i = 0 ; i <a ; i++) {
small = AR[i];
for (int j = i+1 ; j <a ; j++) {
if (AR[j]< small) {
int k = AR[j];
AR[j] = AR[i];
AR[i] = k;
}
}
}
}
int main() {
cout << "Enter the size of Your Aray";
int a;
cin >> a;
int AR[a];
cout << endl;
for (int i = 0; i < a; i++) {
cin >> AR[i];
cout << endl;
}
ss(AR, a);
cout << "The Sorted Array is";
for (int i=0; i < a; i++) {
cout << AR[i] << " ";
cout << endl;
}
}
当我输入以下内容时:
返回的结果是:
阻止列表按预期进行数字排序的错误是什么?
答案 0 :(得分:1)
该功能可以看起来像
void ss ( int a[], size_t n )
{
for ( size_t i = 0 ; i < n ; i++ )
{
size _t small = i;
for ( size_t j = i + 1; j < n ; j++ )
{
if ( a[j] < a[small] ) small = j;
}
if ( i != small )
{
int tmp = a[small];
a[small] = a[i];
a[i] = tmp;
}
}
}
答案 1 :(得分:0)
它似乎不是我所知道的SelectionSort。在每个循环中我知道的算法中,我寻找右子阵列中的最小元素,然后将其与&#34; pivot&#34;交换。循环的元素。这是算法
void selectionSort(int* a, int dim)
{
int posMin , aux;
for(int i = 0; i < dim - 1; ++i)
{
posMin = i;
for(int j = i + 1; j < dim; ++j)
{
if(a[j] < a[posMin])
posMin = j;
}
aux = a[i];
a[i] = a[posMin];
a[posMin] = aux;
}
}
似乎你改变了你找到的每个较小的元素,但也改变了&#34; pivot&#34;的位置。我希望答案很明确。
答案 2 :(得分:0)
在原始函数中一切正常,只有在切换两个向量元素时才需要刷新small
变量。
同样在if语句中将small
变量设置为新值AR[i]
。