raptor五个数排序流程图_经典算法系列之:选择排序

本文通过raptor五个数排序的流程图详细解释了选择排序的原理,逐步展示如何将无序数组{9, 7, 1, 5, 8, 6}升序排列。通过具体的步骤分析,阐述了算法思维的重要性,并讨论了如何将这种思维应用于实际问题中,提升个人竞争力。" 136163650,569322,蓝桥杯Python省赛:寻找被删除的连续正整数,"['Python编程', '蓝桥杯比赛', '中小学python', '编程竞赛', '算法实践']
摘要由CSDN通过智能技术生成

08b9dc360e40dfadc7beb6816382f331.png

1、前言

算法,在计算机中的地位,就相当于人类大脑的决策中枢系统,哪怕最简单的算法,其精妙的思维方式,都可以让人开启一扇新的视窗。

算法,它不仅仅只是狭义的用来解决计算机科学领域的问题,更是一种“思维方式”。算法思维,是一种深度思考和创造的过程。

算法,只有真正理解了,而不只是所谓的知道,并将应用到生活、工作、学习等各个方面,它将一定使人受益终生。

2、原理推导

选择排序,就是选择一个固定的元素与之后的元素依次比较,把小的元素往前调或者把大的元素往后调,实现元素的顺序排列。

给定一组 {9,7,1,5,8,6} 的原始无序数组,按照从小到大升序排列。

683eaaa8c95e5219c0af34ef6d66281a.png

#step1

第一个数字【9】和第二、三、四、五、六个数字依次比较,得出最小数字1,然后数字 【1】 和 【9】 位置互换,完成第一轮排序。

6a5a3fe2c89cb2840c3f0962f70f1303.png

#step2

第二个数字【7】和第三、四、五、六个数字依次比较,得出最小数字5,然后 【5】 和 【7】 位置互换,完成第二轮排序。

3984f12d4126c8667c7181b317ea2ada.png

#step3

第三个数字【9】和第四、五、六个数字依次比较,得出最小数字6,然后 【6】 和 【9】 位置互换,完成第三轮排序。

a44a506b51edcabf27eedc7767bc884a.png

#step4

第四个数字【7】和第五、六个数字依次比较,得出最小数字7,数字 【7】 和 【8】 位置不需要互换,完成第四轮排序。

139e4b7567a7ccaa2978d6af96800789.png

#step5

第五个数字【8】和第六个数字依次比较,得出最小数字8,数字【8】 和 【9】 位置不需要互换,完成第五轮排序。

a9efb4688b75834ac224da96502d3877.png

至此,选择排序已经完成结果为:{1,5,6,7,8,9} ,我们可以看到step4顺序已经排好了,但程序并不知道,所以还会接着继续比较直到最后。

3、代码示例

# 第一种实现,每次比对只要符合条件,马上交换两个元素位置

public static void chooseSortOne(int array[]){   
    //外层循环控制总次数    
    for (int i=0;i<array.length-1;i++){        
    //内层循环控制单个元素比较次数        
        for (int j=i+1;j<array.length;j++){            
            //选择每次从索引【i】开始,分别与后面的其他元素比较,不是相邻的两个数相比较            
            if(array[i] > array[j]){                
                //每次比较满足条件,进行位置交换                
                swapPosition(array, j, i);           
            }        
        }    
    }
}

# 第二种实现,每次比对符合条件,不进行位置交换,只记录需要交换的索引,到一轮比较结束再交换位置

public static void chooseSortTwo(int array[]){    
    //交换索引    
    int index = 0;    
    //外层循环控制总次数    
    for (int i=0;i<array.length-1;i++){       
        //每次从【i】开始,index根据比较结果,更新索引位置        
        index = i;        
        //选择每次从索引【index】开始,分别与后面的其他元素比较,不是相邻的两个数相比较        
        for (int j=i+1;j<array.length;j++){            
            if(array[index] > array[j]){                
                //满足条件时不进行位置交换,只记录索引,下次比较以新的索引为起始位置                
                index = j;            
        }        
    }        

    //一轮循环结束,再将两个数的索引位置互换,节省交换次数,提高排序效率        
    swapPosition(array, index, i);   
    }
}

# 元素交换方法

public static void swapPosition(int array[], int indexA, int indexB){   
    int temp = array[indexA];    
    array[indexA] = array[indexB];    
    array[indexB] = temp;
}

4、禅定时刻

选择排序的精妙之处不在于选择一个元素依次比较,而在于对他的优化处理,比较而不交换,一个小的调整,在数据量级不大的时候,难以体现它的优势,一旦数据量级超过一定的界限,运算效率的速度就相差巨大。

一个产品创造过程中,我们遇到常规的问题,用常规的解决方案可以应付,如果能养成习惯多一份思考,在此基础上持续改进,优化实现方法,日积月累这就形成了个人和企业的护城河,增强个人和企业在社会中的竞争力。

作者简介

思维的持续,一个真的有思想,不穿格子衬衫的程序员。

564a6cfb9c229272e4f7c22b5f2df327.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值