排序的核心就是对比和换位,经过多次对比和必要的换位,以达到结果是有序的效果。
关于数据换位:
在执行换位时,不可以让单纯的两个变量的值分别赋值给彼此。
如果只是让两个变量的值分别赋值给彼此,由于代码是依次执行的,一旦某个变量被赋予新的值,则其原来的值就会丢失;
为了保证在交换值的过程中,变量的原值不会丢失(被重新赋值导致的覆盖),可以使用第三个变量临时存储变量的值
int a=1;
int b=7;
int temp;(重新定义一个新的临时变量)
temp = a;(将a的值进行保存)
a = b;(将b的值赋值给a)
b = temp;(将a的值也就是temp赋值给b,完成换位)
其实,也可以不使用临时便明亮,而使用算数运算来实现换位(语义较差)
int a = 7;
int b = 1;
a=a+b;a(8),b(1)
b=a-b;a(8),b(7)
a=a-b;a(1),b(7)
2冒泡排序
反复对比相邻的两个元素,如果与预期的顺序(升序)不符合,则换位
8673(86预期不符,换成8673)还是预期不符再次进行换位
换成6783,还是不符合换成6738。
第一轮结束之后,再次重复刚才的操作,进行第二轮对比
6378变成6738变成6378变成6378。
在执行第三轮
6378变成3678变成3678变成3678。
每一轮都能够保证将最大的数字移动到右侧,即第一轮循环能够保证最大的数字在最右侧,第二轮循环能保证第二大的数字在右侧的倒数第二位,依次类推。
循环轮次=数组的长度-1;
因为每轮都能将大的数字移动到右侧,后续的轮次就不必再对该数字进行换位了,每一轮的次数是在不断递减的,可以得出循环次数=数组长度-当前轮次
因为在编写代码是,由于当前轮次作为循环变量,且一般使用0作为初始值,即第一轮的但其概念轮次为0,所以,需要将公式调整为循环次数=数组长度-当前轮次-1
需要进行多轮循环,可以使用嵌套的循环来实现
初始条件:int i=0;
循环条件:i<array.length(数组长度)-1