1、冒泡排序算法,如果是在完全无序的情况下,则其时间复杂度为O(n^2)
若是在几近有序的情况下,则推荐使用!
2、第一次,经过与数组后面的元素的比较,选出一个最小的数,第二次,选出一个次小一点的数!
依此,代码如下
package 排序;
public class 冒泡排序冒泡排序 {
public static void main(String agspd[])
{
int a[] = new int[]{90,234,94,83};
for(int i=0;i<a.length;i++)
{
for(int j=i+1;j<a.length;j++) //这里的第二层嵌套是为了与第一个for循环做比较
{
if(a[i] > a[j])
{ //如果a[j]发现后面的元素比a[i]要大,则把小的交换到前面
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
}
}

但是,如果这个数组本身就是有序的了,则还是进行了O(n^2)的时间复杂度运算,就太浪费时间了
所以我们添加一个Bool类型的变量,我们假设如果数组元素进行了排序,就改变Bool值为true,如果一次for循环之后,数组没有进行排序,就代表数组的元素已经是有序状态的了,值为初始值false。之后就退出了,不再进行无意义的for循环了,节省了时间
代码如下:
<pre name="code" class="java">package 排序;
public class 改进后的冒泡排序 {
public static void main(String agspd[])
{
int a[] = new int[]{90,85,94,83,65,63,85,75};
for(int i=1;i<a.length;i++)
{
boolean flag = false; //如果j走了一圈,发现没有交换,即排好序了,就停止无意义的循环了
for(int j=0;j<a.length-i;j++) //如果flag一直为false,意思就是没有进入if这里,就是排好序的意思了,所以退出
{
if(a[j] >= a[j+1])
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
flag = true;
}
}
for(int k =0 ;k<a.length;k++)
{
System.out.print(a[k]+" ");
}
System.out.println(flag);
if(!flag)
{
break;
}
}
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
}
}