Java记录 -36- 冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。

冒泡排序算法的运作如下:(从后往前)

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
public class BubbleSortTest {
    private static void bubbleSort(int[] a){
        for(int k=a.length-1; k>0; --k){
            boolean bl = true;
            for(int i=0; i<k; i++){ //每次都不排序上次最后一个元素
                if(a[i] > a[i+1]){
                    bl = false; //发生交换
                    int temp = a[i];
                    a[i] = a[i+1];
                    a[i+1] = temp;
                }
            }
            if(bl){ //当某步没有发生交换时,说明已经排好序了
                break;
            }
            System.out.println("第 "+(a.length-k)+" 步!");
            for(int i=0; i<a.length; i++){
                System.out.print(a[i]+" ");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        int[] a = {5,2,7,3,4,9,6};
        bubbleSort(a);
    }
}
时间: 2024-12-21 14:20:28

Java记录 -36- 冒泡排序的相关文章

【Java记录】try-with-resources的一个坑

[Java记录]try-with-resources的一个坑 今天处理 AsynchronousFileChannel 时候的一个问题,代码如下: public static void main(String[] args) throws Exception { String filePath = "/home/xe/git/osc/JavaNote/Lang/data/Test.java"; ExecutorService executorService = Executors.ne

java核心技术-(总结自杨晓峰-java核心技术36讲)

1. 谈谈你对java平台的理解 首先是java最显著的两个特性,一次写入处处运行:还有垃圾收集器gc,gc能够对java内存进行管理回收,程序员不需要关心内存的分配和回收问题 然后谈谈jre和jdk的区别,jre包含了jvm和java类库:jdk除了jvm和java类库,还包含了一些java工具集 常见的垃圾收集器有: Serial GC:串行收集,垃圾回收时会阻塞工作线程 Parallel GC:并行收集,多线程收集,停顿时间短,吞吐量高 CMS:使用标记清除算法,多线程进行垃圾收集 G1:

使用C语言和Java分别实现冒泡排序和选择排序

经典排序算法--冒泡和选择排序法 Java实现冒泡排序 基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素放到顶端,最终达到完全有序,首先看个动图: 我们要清楚一点,冒泡排序是相邻元素的两两比较,再看下图是否会清晰些: 输入的数据为:10 30 40 33 5 78 11 100 23 66 第一次排序,从第一个数10依次比较,若10比后者小,则进行交换,当比较到5时,10比5大,所以10就停在第四个位置,再用5去比较,后面的数都比5大,所以5就排到最后了

JAVA记录文件中单词的数量

运行截图: 实现代码: 1 package Ape; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileNotFoundException; 6 import java.io.FileReader; 7 import java.io.IOException; 8 import java.util.regex.Matcher; 9 import java.util.regex.Pattern

java例题_28 冒泡排序

1 /*28 [程序 28 排序算法] 2 题目:对 10 个数进行排序 3 程序分析:可以利用选择法,即从后 9 个比较过程中,选择一个最小的与第一个元素交换, 下次类推, 4 即用第二个元素与后 8 个进行比较,并进行交换. 5 */ 6 /*分析 7 * 冒泡排序法: 8 * 利用数组得到键盘上的一组数据并保存,再通过冒泡排序法得到新的数组 9 * 使用两层for循环,外面一层判断排序排到哪儿了,里面一层用于遍历剩下需要排序的数 10 * 11 * */ 12 13 package hom

java记录在线人数小案例

文件目录: web.xml: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLoc

圣思源Java视频36节练习源码分享(自己的190+行代码对比老师的39行代码)

题目: * 随机生成50个数字(整数),每个数字范围是[10,50],统计每个数字出现的次数 * 以及出现次数最多的数字与它的个数,最后将每个数字及其出现次数打印出来, * 如果某个数字出现次数为0,则不要打印它.打印时按照数字的升序排列. 要求: * 使用数组的知识完成此功能,不能使用JDK的API函数. 分析: * 需要写一个随机数生成函数 * 需要写一个冒泡排序函数 * 需要写一个二分查找获取数组中某元素个数的函数 代码如下: 1 package Array32; 2 3 /** 4 *

java基础之冒泡排序

1.冒泡排序 冒泡排序是一种比较简单的排序算法.算法的原理是: 重复地走访过要排序的数列,一次比较相邻的两个元素,按照规定好的顺序进行比较,如果他们的顺序错误就把他们交换过来.走访数列的工作重复的进行直到没有再需要交换的元素,此时数列的排序已经完成. 核心代码: 1 private static void bubbleSortTest(int arr[]) { 2 int temp = 0; 3 for (int i = 0; i < arr.length-1; i++) { 4 for (in

java算法之冒泡排序法

N个数字要排序完成,总共进行N-1趟排序,每第 i 趟的排序次数为 (N-i) 次,所以 可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数,即   for(inti=0;i<arr.length-1;i++){         for(intj=0;j<arr.length-1-i;j++){         } } 冒泡排序法 口诀: 外层循环 0到n-1 //控制比较轮数 n 表示元素的个数 内层循环 0到n-i-1 //控制每一轮比较次数 两两比较做交换   冒泡排序的优

java记录对象前后修改的内容(工具类)

有时候业务需要,需记录一条记录的修改历史,但是不能为完成任务而硬编码,不靠谱 这种情况可以使用java反射来完成 对对象属性的描述可以通过自定义注解来完成,读取里面的属性进而记录修改历史. 在对象的属性上面加上注解,value设置为属性的中文描述 工具了代码如下 util类(BeanChangeUtil) 1 import java.beans.PropertyDescriptor; 2 import java.lang.reflect.Field; 3 import java.lang.ref