选择排序的算法是,对一个数据序列data[m..n],选择出一个最小的和data[m]交换。这样经过n-1次选择,数据序列将会变成有序。即第一次从data[1..n]选择一个最小的,放到data[1]这个位置,第二次从data[2..n]选择出一个最小的,放到data[2]这个位置,这样重复到第n-1次,从data[n-1..n]选择出一个最小的,放到data[n-1]这个位置。这样数据就从小到大有序排列了。反过来说,每次选择出的是最大的,那就是从大到小排列的。
//---------------选择排序--------------------------------
template<typename T>
void selectpass(T *data,unsigned len,unsigned pos)

...{//一趟选择排序,从data[pos..len-1]选出最小的记录并和data[pos]交换
unsigned i=pos;
for(unsigned j=pos+1; j<len; j++ )

...{
//按升序排列,如果按降序排序则用( data[j] > data[i])
if( data[j] < data[i] )

...{
i = j;
}
}
if( i != pos )

...{
T t = data[i];
data[i] = data[pos];
data[pos] = t;
}
}

template<typename T>
void selectsort(T *data,unsigned len)

...{//选择排序,进行len-1趟选择,每次从data[i..len-1]中选择出一个最小的记录
for( unsigned i=0; i<len-1; i++ )

...{
selectpass( data, len, i );
}
}
//-------------end of 选择排序----------------------------------


int _tmain(int argc, _TCHAR* argv[])

...{

int arr[] = ...{100,5,1,3,11,3,6,-1};
selectsort( arr, sizeof(arr)/sizeof(arr[0]) );
return 0;
}
下面看看示范代码:













































