选择排序

149 阅读1分钟

排序——选择排序

一、什么是选择排序

选择排序就是重复“从待排序的数据中寻找最小值,将其与序列最左边的数字进行交换”这一操作的算法。在序列中寻找最小值时使用的是线性查找。

二、选择排序图解

src=http___img-blog.csdnimg.cn_img_convert_3a95a477a39b225316b22b42afcdb89a.gif&refer=http___img-blog.csdnimg.gif

三、选择排序代码实现

#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)