选择排序浅解(1)

·        直接选择排序的核心在于在每次遍历过程中找到最大值(或者最小值),外层遍历是为了找到每次遍历的起始位置,在每次遍历结束用于存放每次找到的极值,但是在里层遍历过程中只记录其下标,而后利用交换将最值放置在数组首部或者尾部。

·        选择排序是一种不稳定的排序

时间复杂度

·        选择排序最好的时间复杂度为O(n^2)

·        选择排序的最坏时间复杂度为O(n^2)

·        因此选择排序总的平均时间复杂度为O(n^2)

#include<iostream>
#include<string>
using namespace std;
int main(){
	int n,a,temp,e,b[50];
	cin>>n;
	for(int k=0;k<n;k++){
		cin>>b[k];
	}
        for(int i=0;i<n-1;i++){
		a=i;	//每次拿到要比较元素的初始下标
		for(int j=i+1;j<n;j++){
			if(b[a]<b[j])
				a=j;	//如果比较中遇到更大(更小)的元素,则记录下标
		}	//遍历完成之后,a存放的就是每次遍历的极值下标
		if(a!=i){  	//只有每次起始位置i上的元素不是要找的那个极值a上的元素才进行交换(如果起始位置就是极值就用不着交换了)
			temp=b[i];
			b[i]=b[a];
			b[a]=temp;
		}
	}
	for(int r=0;r<n;r++){
		cout<<b[r];
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/zhen921/article/details/80212202
今日推荐