A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2018-3-9 15:41 编辑

【济南校区】JavaEE基础阶段必会案例NO.29-选择排序


     黑马程序员课程内容丰富多样,每个知识点我们都设计有新奇的案例让大家练习。黑马程序员训练营的课程也是案例驱动教学,每天都会进行大量的代码练习。今天我们就来一起做一个基础第一阶段第6天的一个小案例。
案例:
        这里有一个数组,大小顺序随机排列,现在要求你将这个数组的元素从大到小排列。
        int[] arr = {3,6,4,8,9};  是不是感觉很简单?哈哈,自己先做一做试试,如果能自己做出来就更好啦~当然做法不只有一种哦!

        好,这里老师讲一种排序算法交 选择排序,其实原理说起来很简单,就是每次把元素中的最大值找出来和排在最前的元素交换位置。如果这样说还不是很理解,那就直接看看代码吧!
[Java] 纯文本查看 复制代码
public class Test04_xuanze {
        public static void main(String[] args) {
                int[] arr = {3,6,4,8,9};
                //遍历数组
                for (int i = 0; i < arr.length; i++) {
                        int index = i;   
                        for (int j = i; j < arr.length; j++) {
                                if(arr[j] > arr[index]){
                                        index = j;   
                                }
                        }
                        int temp = arr[i];[/i]
                        arr = arr[index];
                        arr[index] = temp;
                }
                for (int i = 0; i < arr.length; i++) {
                        System.out.print(arr + " ");
                }
        }
}
如果自己能把代码看懂,自己多敲几遍掌握了最好了。如果基础差点代码看不懂 ,没关系,这里老师带着大家仔细分析一下:

首先这个数组是{3,6,4,8,9},第一层for循环我们遍历数组,第一个拿到的是3,这是i=0,index=0, 然后开始执行第二层的for循环,j的值从i-arr.length
也就是j的值从 0 1 2 3 4,取到数组中所有的值跟arr[index]比较,遇到比它值大的就给它重新赋值,arr[index]的值从3 变为6,8,9,最终第二层for循环结束,arr[index]值里是9,这时继续向下执行,把9和3的值交换,这就完成了一次外层循环,然后i++ 变成1,开始第二次外层循环,此时数组中的元素变为{9,6,4,8,3}

注意,循环的嵌套不容易理解的地方就是外层循环变量变化一次,内层循环的变量要变化一轮。所以i变成1以后,j的值从i-arr.length变化一轮,1 2 3 4
取到数组中所有的值跟arr[index]比较,最终arr[index] 的值为8,然后内层循环结束,把8和6交换位置。此时数组中的元素变为{9,8,4,6,3}


再i++ 继续执行,交换6和4,此时数组中的元素变为{9,8,6,4,3},程序还会继续执行比较4 和 3 但是不会交换了,这里就完成了我们的排序。


怎么样?能看懂这个流程吗?

我们来画图看看这个过程:

自己敲几遍试试吧~

ok!大工告成!!
运行结果没有问题
好了,希望通过这个案例大家对于数组,循环相关的方法能更加熟悉,如果再遇到相关的题目可以自己完成!现在把这个案例多敲几遍吧!
   其实,每个案例都有很多种写法,不同的人可能有不同的思路。黑马程序员训练营也是非常鼓励大家开动脑筋积极思考的。
      做完了这个题,离你走上人生巅峰又近了一步,继续加油吧!骚年!  

      点进这个帖子的同学肯定是要奋发图强,学技术拿高薪的有志青年,这里我看你骨骼惊奇,是个绝世的练武奇才,你我有缘,今天我就把这个武林秘籍如来神掌传授于你! 什么?不想学如来神掌?不要紧!这里有各个门派的武林绝学,链接拿好!!哈哈哈哈



2 个回复

倒序浏览
我来占层楼啊   
回复 使用道具 举报
好东西司法所的方式
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马