zoukankan      html  css  js  c++  java
  • 4.20Java冒泡排序基础算法

    4.20Java冒泡排序基础算法

    基础算法的动态视图

    算法

    关键点
    • 在代码上要关注两个for循环的本质是什么

    • 结合动图分析代码结构

    /**
    * 冒泡排序
    * @param array
    */
    public static void bubbleSort(int[] array){
       if(array.length == 0){
           return;
      }
       for(int i=0;i<array.length;i++){
           // 每一次都减少i个元素
           for(int j=0;j<array.length-1-i;j++){
               // 若相邻的两个元素比较后,前一个元素大于后一个元素,则交换位置。
               if(array[j]>array[j+1]){
                   int temp = array[j];
                   array[j] = array[j+1];
                   array[j+1] = temp;
              }
          }
      }
    }
    //Array工具类直接用sort方法比较香

    冒泡排序实例:

    package com.array;

    import java.util.Arrays;

    /**
    * 测试冒泡排序
    * @author Lucifer
    */
    public class TestBubbleSort {
       public static void main(String[] args) {

           int[] values = {3,1,6,2,9,0,7,4,5,8};
           int temp = 0;
           for (int j = 0; j < values.length -1; j++){
               boolean flag = true;
               for (int i = 0; i < values.length - 1 - j; i++){
                   //因为到最后以为索引是9如果写判断会出现索引10就会出现报错

                   if (values[i] > values[i + 1]){
                       temp = values[i];
                       values[i] = values[i + 1];
                       values[i + 1] = temp;
                       flag = false;
                  }
    //               System.out.println(Arrays.toString(values));
              }
               /*如果不再发生交换,说明后面也不会发送交换了。直接跳出不在执行循环*/
               if (flag){
                   System.out.println("Finish");
                   break;
              }
               System.out.println("######");
          }
           System.out.println(Arrays.toString(values));
      }
    }
    /*
    一次for循环只能找到最大的9并且放到后面,前面的数不会进行再次排序判断。
    所以外层要在套一层for循环去实现前面的数的排序
    事实上在外层循环也就是j = 5的时候排序已经排好了。
    后面的进行的循环是多余的,可以进行优化
    优化方法:
    1.在每次大循环的时候建一个布尔变量
    2.利用布尔量进行判断
       1.如果在小循环中数值还发生交换,认为没有排序好,继续执行外层循环
       2.如果在小循环中数值不发生交换了,认为排序好了,不再执行外层循环---break
    */

     

    It's a lonely road!!!
  • 相关阅读:
    第十五讲 实例模式
    第十四讲 实例模式
    将博客搬至CSDN
    CSU 1616: Heaps(区间DP)
    hdu 1281棋盘游戏(二分匹配)
    hdu 1042 N!(大数的阶乘)
    hdu 3371 Connect the Cities (最小生成树Prim)
    hdu 4502吉哥系列故事——临时工计划 (简单DP)
    hdu1230火星A+B (大数题)
    hdu1301 Jungle Roads (Prim)
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14682542.html
Copyright © 2011-2022 走看看