1、環(huán)境配置:
- 系統(tǒng):win10
- 編程語(yǔ)言:C++
- 編譯器:DevC++
2、算法思想:
找到一個(gè)最小(最大)的放到第一位,然后從剩下的當(dāng)中繼續(xù)找最?。ㄗ畲螅┑姆诺降诙?。
3、代碼:
#include<iostream>
using namespace std;
void sort(int n,int a[]);
//主函數(shù)
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;
}
//選擇排序函數(shù)
void sort(int n,int a[])
{
if(sizeof(a) < 1){
cout<<"empty arry";
}
for(int i=0 ; i<n ; i++){
//從i到最后一項(xiàng)中找最小項(xiàng)對(duì)應(yīng)的下標(biāo)
int min = a[i];
int z = i;
for(int m = i ; m < n ; m++){
if(min > a[m]){
min = a[m];
z = m;
}
}
//將首項(xiàng)和最小數(shù)交換
int sw = 0;
sw = a[z];
a[z] = a[i];
a[i] = sw;
}
}
4、結(jié)果展示:

結(jié)果.png
5、反思總結(jié):
//從i到最后一項(xiàng)中找最小項(xiàng)對(duì)應(yīng)的下標(biāo)
int min = a[i];
int z = 0;
for(int m = i ; m < n ; m++){
if(min > a[m]){
min = a[m];
z = m;
}
}
在測(cè)試當(dāng)中這段代碼出了問(wèn)題,原因就是z的初始值問(wèn)題,如果存在比a[i]小的項(xiàng),那么z在for循環(huán)中會(huì)被替換,但是如果不存在比a[i]小的項(xiàng),比如所有項(xiàng)目都是排好序的,那么for循環(huán)當(dāng)中的條件語(yǔ)句就不會(huì)執(zhí)行,z值也就不會(huì)改變,如果一開(kāi)始給z賦值是0,就會(huì)出現(xiàn)問(wèn)題。