排序算法——选择排序

  • 选择NUM-1轮,每轮从待排数组(除已排元素之外的元素构成的集合组成的数组)中选最小的放到待排数组。第一个循环从待排数组中找到最小的,记录其下标交换,依此,每轮都选最小的直至NUM-1轮
     66		43		89		98		12		18		15		23		33		50
    a[0]   a[1]    a[2]    a[3]    a[4]    a[5]    a[6]    a[7]    a[8]    a[9]    
     12		43		89		98		66		18		15		23		33		50
    a[0]   a[1]    a[2]    a[3]    a[4]    a[5]    a[6]    a[7]    a[8]    a[9] 
     12		15		89		98		66		18		43		23		33		50 
    a[0]   a[1]    a[2]    a[3]    a[4]    a[5]    a[6]    a[7]    a[8]    a[9]     
     12		15		18		98		66		89		43		23		33		50     
    a[0]   a[1]    a[2]    a[3]    a[4]    a[5]    a[6]    a[7]    a[8]    a[9]     
     12		15		18		23		66		89		43		98		33		50     
    a[0]   a[1]    a[2]    a[3]    a[4]    a[5]    a[6]    a[7]    a[8]    a[9]     
     12		15		18		23		33		89		43		98		66		50     
    a[0]   a[1]    a[2]    a[3]    a[4]    a[5]    a[6]    a[7]    a[8]    a[9]     
     12		15		18		23		33		43		89		98		66		50     
    a[0]   a[1]    a[2]    a[3]    a[4]    a[5]    a[6]    a[7]    a[8]    a[9]    
     12		15		18		23		33		43		50		98		66		89
    a[0]   a[1]    a[2]    a[3]    a[4]    a[5]    a[6]    a[7]    a[8]    a[9]     
     12		15		18		23		33		43		50		66		98		89     
    a[0]   a[1]    a[2]    a[3]    a[4]    a[5]    a[6]    a[7]    a[8]    a[9]  
     12		15		18		23		33		43		50		66		89		98     
    a[0]   a[1]    a[2]    a[3]    a[4]    a[5]    a[6]    a[7]    a[8]    a[9] 
    //选择排序
    void select_sort(int* a, int len){
    	int minIdx;
    	int t;
    	for (int i = 0; i < len - 1; i++){//len-1轮
    		//从 待排数组中(i - len-1) 找出最小的
    		minIdx = i;//先假设待排数组中第一个最小
    		for (int j = i + 1; j < len; j++){
    			minIdx = (a[minIdx] < a[j]) ? minIdx : j;
    			/*
    			if (a[minIdx] < a[j])
    				minIdx = minIdx;
    			else
    				minIdx = j;
    
    			if (a[minIdx] > a[j]) minIdx = j;
    			*/
    		}
    		//和待排数组中第一个位置(i)交换
    		if (a[minIdx] < a[i]){
    			t = a[minIdx];
    			a[minIdx] = a[i];
    			a[i] = t;
    		}
    	}
    }      

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值