对于是冒泡升级版的选择说,复杂度降低了,不用遍历很多次数组,挺 垃圾 好用的。
在之前我们要了解一个函数 swap();
#include<iostream>
using namespace std;
int main(){
int arr[2];
swap(arr[0],arr[1]);
return 0;
}
这个函数相当于把两个数进行交换,避免多余 KBZ 变量产生。
然后他和冒泡不一样的是他用一个 key 变量存储理想最小、大值,选完后下一次不在遍历这一个最小、大值,因为它排序完成了。
if(arr[j]<arr[key]){
key=j;
}
接下来上源代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int N;
cout<<"请输入数组项数:"<<endl;
cin>>N;
int arr[N];
cout<<"请输入数组数字:"<<endl;
for(int x=0;x<N;x++) {
cin>>arr[x];
}
cout<<"请等待……"<<endl;
for(int i=0;i<N;i++){ // 外
int key=i;
for(int j=i+1;j<N;j++){ //内
if(arr[j]<arr[key]){
key=j;
}
}
if(key!=i){
swap(arr[key],arr[i]);
}
}
cout<<"该数组有"<<N<<"项;"<<endl;
cout<<"排序后为:";
for(int y=0;y<N;y++){
cout<<arr[y]<<" ";
}
return 0;
}
理解图(手绘):