选择排序 互相对比

在一本书上看到的选择排序算法,与网上找的之间比较。目的不是比哪个算法更好,只为多记一些方式,在有时候能用到。

#include<iostream>
using namespace std;

#define maxn 10007

int main(){
	
	int a[maxn];
	int t;//数组大小
	while(cin >> t){
		int itemp,ipos;
		int i,j;
		for(int i =0;i < t;i++){
			cin >> a[i];
		}
		for( i = 0;i < t-1;i++){
			itemp = a[i];ipos = i;
			for( j = i+1;j <t;j++){
				if(a[j]< a[i]){	
					itemp = a[j];ipos = j;
				}	
			}
			a[ipos] = a[i];	a[i] = itemp;
		}
		for(int i = 0;i < t;i++){
			cout << a[i]<< " ";
		}
	} 
	return 0;
} 

运行结果:

网上的代码:

#include<iostream>
using namespace std;

#define maxn 10007

int main(){
	
	int a[maxn];
	int t;//数组大小
	while(cin >> t){
		int itemp,ipos;
		int i,j;
		for(int i =0;i < t;i++){
			cin >> a[i];
		}
		for( i = 0;i < t-1;i++){
			ipos = i;//记录最小元素下标 
			for( j = i+1;j <t;j++){
				if(a[j]< a[ipos]){	
					ipos = j;
				}	
			}
			if(i!=ipos){//交换 
				int temp = a[ipos];
				a[ipos] = a[i];
				a[i] = temp;
			}
			
		}
		for(int i = 0;i < t;i++){
			cout << a[i]<< " ";
		}
	} 
	return 0;
} 

结果一样,都是上面那结果。

在写排序代码的时候,一定要注意:

1,第一层for循环从0到n-1,第二层是从i+1到n(按上面写的,t就是n)。

2,在第一层与第二层循环中间,一定要有一个记录最小(大)值的变量。

3,在交换两元素值时,不论那种方式,均得对应,不然会出错,达不到想要得结果。

4,学完一种之后,一定要理解这种,不能似懂非懂,不然解题会很烦人的。还有,尽量对比着记忆,这样会很快理解为什么这样写。

本人建议:在前几次写的时候,能自己写的自己写,写不了的可以参考别人写的,然后自己单步运行,逐一发现其中的变化过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值