排序——选择排序
一、什么是选择排序
选择排序就是重复“从待排序的数据中寻找最小值,将其与序列最左边的数字进行交换”这一操作的算法。在序列中寻找最小值时使用的是线性查找。
二、选择排序图解
三、选择排序代码实现
#include<iostream>//选择排序
using namespace std;
void f(int a[],int n){ //a为待排序数组,n为数组长度
for(int i=0;i<n-1;i++){
int k=i;//假定第i个就是最小数字,并用k来记录最小数字下标
for(int j=i+1;j<n;j++){//寻找真正的最小数字的下标
if(a[j]<a[k]){
k=j;
}
}
if(i!=k){//假定第i个就是最小数字不成立,换为真正最小数字
int t=a[k];
a[k]=a[i];
a[i]=t;
}
}
}
void show(int a[],int n){
for(int i=0;i<n;i++){
cout<<a[i]<<endl;
}
}
int main(){
int a[10]={9,5,3,7,4,8,6,4,2,1};
f(a,10);
show(a,10);
return 0;
}
四、结束语
选择排序使用了线性查找来寻找最小值,因此在第1轮中需要比较n-1个数字,第2轮需要比较n-2个数字……到第n-1轮的时候就只需比较1个数字了。因此,总的比较次数与冒泡排序的相同,都是(n-1)+(n-2)+…+1≈n2/2次。
每轮中交换数字的次数最多为1次。如果输入数据就是按从小到大的顺序排列的,便不需要进行任何交换。选择排序的时间复杂度也和冒泡排序的一样,都为O(n2)