冒泡排序图解

简介: 冒泡排序图解

原理分析


image.png


image.png

排序结果:


image.png


代码

/**
  * 冒泡排序
  *  相邻元素两两比较,大的往后放,第一次完毕后,最大值就出现在
  * 最大索引处,同理,继续,即可得到一个排序好的数组
  *
  * 规律:
  *  1、两两比较,大的往后放。
  *  2、第一次比较完毕后,下一次比较的时候就会减少一个元素的比较
  *  3、第一次比较,有0个元素不比
  *        第二次比较,有1个元素不比    
  *        第三次比较,有2个元素不比    
  *        第四次比较,有3个元素不比    
  *    .....
  *  4、总共需要比较数组的长度-1次
  */
public class BubbleSort {
     public static void main(String[] args) {
          int[] arr = {21,69,90,55,12};
          //输出数组
          printArr(arr);
          //详细排序过程
          detailSort(arr);
          int[] arr2 = {23,59,34,88,2,99,68};
          //最终版
          endSort(arr2);
     }
     private static void endSort(int[] arr2) {
          System.out.println();
          System.out.println("原序列");
          printArr(arr2);
          //两次for循环解决
          for(int i = 0; i < arr2.length-1; i++){
              for(int j=0; j < arr2.length-1-i;j++){
                   if(arr2[j] > arr2[j+1]){
                        int temp = arr2[j];
                        arr2[j] = arr2[j+1];
                        arr2[j+1] = temp;
                   }
              }
          }
          System.out.println();
          System.out.println("两层循环排序");
          printArr(arr2);
     }
     private static void detailSort(int[] arr) {
          System.out.println();
          System.out.println("第一次排序:");
          //第一次排序
          //arr.length-1 为了防止数据越界
          //arr.length-1-0:为了减少比较的次数
          for(int i=0; i < arr.length-1-0; i++){
              if(arr[i] > arr[i+1]){
                   int temp = arr[i];
                   arr[i] = arr[i+1];
                   arr[i+1] = temp;
              }
          }
          printArr(arr);
          System.out.println();
          System.out.println("第二次排序:");
          //第二次排序
          for(int i=0; i < arr.length-1-1; i++){
              if(arr[i] > arr[i+1]){
                   int temp = arr[i];
                   arr[i] = arr[i+1];
                   arr[i+1] = temp;
              }
          }
          printArr(arr);
          System.out.println();
          System.out.println("第三次排序:");
          //第三次排序
          for(int i=0; i < arr.length-1-2; i++){
              if(arr[i] > arr[i+1]){
                   int temp = arr[i];
                   arr[i] = arr[i+1];
                   arr[i+1] = temp;
              }
          }
          printArr(arr);
          System.out.println();
          System.out.println("第四次排序:");
          //第四次排序
          for(int i=0; i < arr.length-1-3; i++){
              if(arr[i] > arr[i+1]){
                   int temp = arr[i];
                   arr[i] = arr[i+1];
                   arr[i+1] = temp;
              }
          }
          printArr(arr);
     }
     //输出数组
     private static void printArr(int[] arr) {
          System.out.println(Arrays.toString(arr));
     }
}


目录
相关文章
|
14天前
|
搜索推荐 算法 Python
不了解冒泡排序的原理?
不了解冒泡排序的原理?
19 5
|
6月前
|
存储 人工智能 搜索推荐
冒泡排序:了解原理与实现
冒泡排序:了解原理与实现
41 0
|
9月前
|
搜索推荐
冒泡排序的原理
冒泡排序算法的原理如下: 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3.针对所有的元素重复以上的步骤,除了最后一个。 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比比较 白话就是:比如有6个数,你需要比较5趟,这个是固定死的
212 0
|
10月前
|
算法 搜索推荐 Java
图解冒泡排序
本文通过图解的方式介绍冒泡排序算法,帮助读者更直观地理解其工作原理和实现过程。
57 0
图解冒泡排序
|
10月前
|
存储
图解:非递归实现快速排序
方法的调用实际是使用了方法调用栈。递归不就是方法调用本身就是入栈和出栈的过程吗。如果是这样的话,我们就可以使用栈来替换之前的递归,在栈中存储方法每次传入的参数即可。
98 0
图解:非递归实现快速排序
|
10月前
|
算法 搜索推荐
图解:冒泡排序升级之【鸡尾酒排序】
鸡尾酒排序,是冒泡排序算法的一种升级。冒泡排序的每个元素都可以像气泡一样,根据自身大小,一点点的向着数组的某侧移动。算法每一轮都是从左到右来比较元素,进行**单向**的位置交换的。而鸡尾酒排序是在此基础上元素比较和交换过程变成了**双向**的。固[鸡尾酒]排序又称双向冒泡排序、鸡尾酒搅拌排序、搅拌排序、涟漪排序、来回排序或快乐小时排序, 是冒泡排序的一种变形。
85 0
图解:冒泡排序升级之【鸡尾酒排序】
|
搜索推荐
排序算法图解(二):选择排序
文章目录 1 选择排序简介 2 图解选择排序算法 3 选择排序代码实现 写在最后
排序算法图解(二):选择排序
|
算法 搜索推荐
排序算法图解(三):插入排序
文章目录 1 插入排序简介 2 插入排序思想及图解 3 插入排序代码实现 写在最后
排序算法图解(三):插入排序
|
搜索推荐 算法
排序算法图解(一):冒泡排序与冒泡排序的优化
文章目录 1 冒泡排序简介 2 图解算法 3 冒泡排序代码实现 4 冒泡排序算法的优化 写在最后
排序算法图解(一):冒泡排序与冒泡排序的优化
|
搜索推荐 算法 Shell
排序算法图解(四):希尔排序
文章目录 1 希尔排序简介 2 希尔排序算法图解 3 希尔排序代码实现
排序算法图解(四):希尔排序