1、环境配置:
- 系统:win10
- 编程语言:C++
- 编译器:DevC++
2、算法思想:
找到一个最小(最大)的放到第一位,然后从剩下的当中继续找最小(最大)的放到第二位。
3、代码:
#include<iostream>
using namespace std;
void sort(int n,int a[]);
//主函数
int main()
{
int A[] = {5,4,3,2,1};
for(int v=0; v<sizeof(A)/sizeof(A[0]); v++){
cout<<A[v]<<",";
}
cout<<""<<endl;
sort(sizeof(A)/sizeof(A[0]),A);
for(int v=0; v<sizeof(A)/sizeof(A[0]); v++)
{
cout<<A[v]<<",";
}
return 0;
}
//选择排序函数
void sort(int n,int a[])
{
if(sizeof(a) < 1){
cout<<"empty arry";
}
for(int i=0 ; i<n ; i++){
//从i到最后一项中找最小项对应的下标
int min = a[i];
int z = i;
for(int m = i ; m < n ; m++){
if(min > a[m]){
min = a[m];
z = m;
}
}
//将首项和最小数交换
int sw = 0;
sw = a[z];
a[z] = a[i];
a[i] = sw;
}
}
4、结果展示:

5、反思总结:
//从i到最后一项中找最小项对应的下标
int min = a[i];
int z = 0;
for(int m = i ; m < n ; m++){
if(min > a[m]){
min = a[m];
z = m;
}
}
在测试当中这段代码出了问题,原因就是z的初始值问题,如果存在比a[i]小的项,那么z在for循环中会被替换,但是如果不存在比a[i]小的项,比如所有项目都是排好序的,那么for循环当中的条件语句就不会执行,z值也就不会改变,如果一开始给z赋值是0,就会出现问题。
网友评论