C++实现选择排序

C++实现选择排序,第1张

选择排序

选择排序即:每轮从第i个数开始包括第i个数在内,找到其中最小的数,与第i个数交换位置。


注意:

  1. 当比较到最后一个数时,可以不比较
  2. 当最小的数就是最初开始赋值给min的数时,可以不进行交换,因为有的交换方式在两个名称或指针指向同一个值的时候,不能实现正确的交换
  3. 所以在交换前可以加一个判断

具体代码实现见如下:

#include
using namespace std;
int main(){
	int data[5] = {3,4,2,5,3};
	//选择排序
	for(int i = 0;i < 5 - 1;i++){//注意这里的5 - 1,只剩下最后一个数时,不需要再进行比较交换
        /*
        当这里的 5 - 1 换成 5时  数据交换方式1 2 4都会出现问题
        */
		int minpos = i;
		for(int j = i + 1;j < 5;j++){
			if(data[minpos] > data[j]){
				minpos = j;
			}
		}
        //数据交换方式  1
//		int &a = data[minpos];//这里用异或代替不行,当两个数相等的时候同时指向一个数据,异或为零 
//		int &b = data[i];
//		a = a^b;
//		b = a^b;
//		a = a^b;
		//数据交换方式  2
        //采用这种交换方式时data[minpos] 可以等于 data[i] 但是 minpos 不能等于 i
        //它们不能指向同一个地址
//		data[minpos] = data[minpos]^data[i];
//		data[i] = data[minpos]^data[i];
//		data[minpos] = data[minpos]^data[i];		
		//数据交换方式  2  的另一种写法
//        if(minpos != i)
//			data[minpos] ^= data[i] ^= data[minpos] ^= data[i];
        
        //数据交换方式  3  这是最稳妥的一种方法  推荐使用
		int temp = data[minpos];
		data[minpos] = data[i];
		data[i] = temp;
        
        //数据交换方式 4 
       	//采用这种交换方式时data[minpos] 可以等于 data[i] 但是 minpos 不能等于 i
//        data[minpos] = data[minpos] + data[i];
//        data[i] = data[minpos] - data[i];
//        data[minpos] = data[minpos] - data[i];
	}
				
	for(int i = 0;i < 5;i++){
		cout <<  data[i] << " ";
	}
	return 0; 
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/621783.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-15
下一篇 2022-04-15

发表评论

登录后才能评论

评论列表(0条)

保存