请对选择排序算法(c++实现)了解透彻的高手帮忙看看我的程序错在哪里?

来源:百度知道 编辑:UC知道 时间:2024/05/18 10:06:41
该程序能对int,string型数组排序,但不能对double型排序,请问这是为什么?
#include<iostream>
using namespace std;
template <class T>
void taxis(T x[],int n)
{
int i,j,k;
T a;
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<=n;j++)
if(x[j]<x[k])
k=j;
if(k!=i)
{
a=x[i];x[i]=x[k];x[k]=a;
}
}
for(i=0;i<n;i++)
cout<<x[i]<<" ";
cout<<endl;

}
void main()
{
double b[]={2.3,4.5,1.8,9.3,0.2};
taxis(b,sizeof(b)/sizeof(double));
}

for(j=i+1;j<=n;j++)

数组是[0]-[n-1] 你j<=n就多循环了一次,
改成j<n就对了

#include "stdafx.h"
#include<iostream>
using namespace std;
template <class T>
void taxis(T x[],int n)
{
int i,j,k;
T a;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(x[j]>x[k])
k=j;
}
if(k!=i)
{
a =x[i];
x[i]=x[k];
x[k]=a;
}

}
for(i=0;i<n;i++)
{
cout<<x[i]<<" ";
}
cout<<endl;

}
void main()
{
double b[]={2.3,4.5,1.8,9.3,0.2};
taxis(b,sizeof(b)/sizeof(double));
}