五.JAVA 系列学习笔记之冒泡排序
作为排序算法中比较经典的,冒泡排序实现起来比较简单,有两个原则
1.两层循环,外层冒泡论数,里层依次比较;
2.算法时间复杂度为O(n的平方);
1.2具体算法如下:(升序为例)
比较数组之中的两个相邻的数,如果第一个比第二个大,那么就让第一个与第二个互换下位置(使用If语句和临时变量即可实现);
2.每次比较都会产生一个结果,即必然会出现一个最大的和一个最小的;
3.比较的次数为数组的长度减一;
4.下一轮可以减少一次排序,一共可以进行数组长度减一轮;
5.依次循环,直至结束;
程序如下:
package Array;
//冒泡排序算法
import java.util.Arrays;
public class Demo05 {
public static void main(String[] args) {
int[] a = {1,7,8,28,35,68,79};
int[] sort = sort (a);
System.out.println(Arrays.toString(sort));
}
//冒泡排序
public static int[] sort(int[] arrays) {
int t=0;
for (int i=0;i<arrays.length-1;i++)//设置外循环,总比较次数,应该为数组长度减一
{
for (int j=0;j<arrays.length-1;j++)
{
if (arrays[j + 1] < arrays[j]) { //if语句进行比较判断,根据大小进行互换位置
t=arrays[j+1];
arrays[j+1]=arrays[j];
arrays[j]=t;
}
}
}
return arrays;
}
}
优化问题:
冒泡排序作为经典的排序算法,优化的算法比较多,笔者在此仅写出一种,仅供参考;
冒泡算法,需要比较两个相邻的数,不管当前有没有进行顺序,或者如果数组本身已经满足顺序要求,根据冒泡算法,还是要进行上述的过程。那么就出现了问题,基于此,下述的优化算法会在排序之前加入判断,如果当前顺序满足条件,则程序终止。稍后程序给出的仅为减少最后一次的方法
程序如下:
package Array;
//冒泡排序算法
import java.util.Arrays;
public class Demo05 {
public static void main(String[] args) {
int[] a = {1,7,8,28,35,68,79};
int[] sort = sort (a);
System.out.println(Arrays.toString(sort));
}
//冒泡排序
public static int[] sort(int[] arrays) {
boolean flag = false; //添加布尔标量flag
int t=0;
for (int i=0;i<arrays.length-1;i++)//设置外循环,总比较次数,应该为数组长度减一
{
for (int j=0;j<arrays.length-1;j++)
{
if (arrays[j + 1] < arrays[j]) { //if语句进行比较判断,根据大小进行互换位置
t=arrays[j+1];
arrays[j+1]=arrays[j];
arrays[j]=t;
flag =true;//如果进行了循环则为真
}
if(flag=false)//if语句对flag进行判断,为false则跳出循环
break;
}
}
return arrays;
}
}
上述实现原理比较简单,在方法中定义了一个布尔变量,首先让布尔变量为false,在第二段循环里面规定布尔变量为ture,如果循环结束后,对布尔值进行判断,如果值为false,则打断循环。即可实现上述优化
以上为个人片语,如有不妥,多多包涵。