冒泡排序
- 比较数组中,两个相邻元素的值,如果第一个数比第二个数大,我们就交换他们的位置
- 每一轮都会有一个值到达最终位置
- 下一轮则可以少一次排序,依次循环,直至结束。
看代码:
int[] nums={1,5,6,8,2,3,4};
//外层循环判断要多少次
for(int i =0;i<nums.length-1;i++)
{
//内层循环判断里面的数值 每一次还要额外减一个i的循环次数
for(int j=0;j<nums.length-1-i;j++) {
if (nums[j] > nums[j + 1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j+ 1] = temp;
}
}
这个代码,我们已知四个数字中比较三次,所以要nums.length-1,每经过一轮排序,就会减少一次循环,所以减i次循环(每经过一次循环,i+1),外层循环为记录次数,内层循环为比较数组元素的值。
优化:
代码:
int[] nums={1,5,6,8,2,3,4};
//外层循环判断要多少次
for(int i =0;i<nums.length-1;i++)
{
//通过b来去除无意义的比较
boolean b =false;
//内层循环判断里面的数值 每一次还要额外减一个i的循环次数
for(int j=0;j<nums.length-1-i;j++) {
if (nums[j] > nums[j + 1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j+ 1] = temp;
b=true;
}
if(b==false)
{
break;
}
}
加入一个布尔变量,只要内存循环中不存在后面比前面大的情况,就结束整个循环,能够减少一些运算。