最近学习JAVA 想着用java实现这两个算法,一敲代码就发现又忘记了一半, 还好还是一边分析一边回忆敲出来了 我们这打代码的, 有点像练钢琴和功夫一日不打就退步,學习初期最重要的还是练手感
ps: 本人小白一个,如果哪里有不对请大佬们指出欢迎各位指出我的不足之处。
废话不多说进入正题:
核心思想: 让每一对相邻的邻居比较 ,发现前面的比后面的大的就交换两个的位置 关键是每一对相邻的元素作比较 ,比较完每一轮之后后面的都是有序的
- 有n个数,就要进行n-1趟比较第1趟要进行n-1次两两比较,
- 第j趟就要进行n-j次比较 算法思想: j在移动,j和他右边的数字比较一旦有符合条件的,就交换位置
- 外循环 i 不管具体的数组元素, 而是控制循环的趟数!
每趟循环中将数组中最小或最大的放在第一个 ,从没有排好序的数列中找出最大/最小的元素放到排好序的后面
第i行设i为最值下标,往后面比较找到最值的下标,如果最值下标不是i 就交换最值的元素和下标为i 的元素
- 每一趟比较过后,前面都是有序的那一边有序决定了内循环 j 从哪里开始(和冒泡法区分 刚好冒泡法昰后面的有序 )
- 每一趟比较只改变一个值 , 其余元素的位置相对不变
- 个人经验: 我每一次打这个代码都会把记录下标改成记录具体的数组え素 导致程序有点不正常。但没有深究 有兴趣的朋友也可以自己试一下不记录下标而直接记录数组元素。