冒泡排序:从前向后进行两两比较,如果前面的数大于后面的就交换(从小到大)

1,097 阅读1分钟

今天冒泡比较晚,这几天心态有点变化。很奇怪,我只要坐在电脑前就能学进去,但是怎么坐在电脑前,确实一个大问题。脑子里总有一个小天使告诉我,不要去,那里有魔鬼。这可真是一个奇妙的故事,我自己都觉得扯淡。

今天的算法题是一个与数组有关的典型排序算法:

 从前往后,从大到小排序

思路:每轮都将最大的数换到后面去

分为内外圈两个循环,外圈循环比较轮数,内圈循环比较当前元素与其他元素的大小,如果比后面的大就交换,直到把最大的扔到后面

 public class Test{
     public static void main(String[] args){
         //给个数组
         int[] data = {12,25,5,32,18};
         
         //如果有n个数,比较n-1轮
         for(int x = 0;x < data.length-1;x++){
             //内圈比较当前元素与其他元素的大小,所以,比较(data.length-1-当前元素)下标轮
             for(int i = 0;i < data.length-1-x;i++){
                 if(data[i] > data[i+1]){
                     int a = data[i];
                     data[i] = data[i+1];
                     data[i+1] = a;
                 }
                 //每比较一轮就输出数组元素变化过程
                 System.out.println(Arrays.toString(data));
             }
             System.out.println("-------");
         }
     }
 }

这个过程比较麻烦,需要一轮一轮的比较,时间复杂度较高,后期可能水平提高会写一个简单的方法。