Java实现八大排序之冒泡排序

冒泡排序

  1. 冒泡排序的定义:

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

    这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。(定义来自百度百科)。简单的说就是持续交换两个元素,直到数列变有序。

  2. 冒泡排序的算法思想:

    比较相邻的元素,如果第一个比第二个元素要大,则交换这两个数。对每对相邻的元素进行同样的工作,从第一对到最后一对,这样一趟下来最小的数一定在数列第一的位置。然后对除了第一个数以外的其余的数进行同样的工作,直到待排序数列的长度为1。
  3. 冒泡排序的算法实现:
//冒泡排序实现一Integer[] aa = {1,2,4,6,7,8,90,123,0,23444,24};        for ( int i = 0 ; i < aa.length - 1 ; i++ ) {            for ( int j = i + 1 ; j < aa.length ; j++ ) {                if ( aa[i] > aa[j] ) {                    int temp = aa[i];                    aa[i] = aa[j];                    aa[j] = temp;                }            }                        System.out.print("第" + (i+1) + "趟:");            for ( int k = 0 ; k < aa.length ; k++ ) {                System.out.print(" "+ aa[k]);            }            System.out.println(" ");        }执行的结果为:第1趟: 0 2 4 6 7 8 90 123 1 23444 24 第2趟: 0 1 4 6 7 8 90 123 2 23444 24 第3趟: 0 1 2 6 7 8 90 123 4 23444 24 第4趟: 0 1 2 4 7 8 90 123 6 23444 24 第5趟: 0 1 2 4 6 8 90 123 7 23444 24 第6趟: 0 1 2 4 6 7 90 123 8 23444 24 第7趟: 0 1 2 4 6 7 8 123 90 23444 24 第8趟: 0 1 2 4 6 7 8 24 123 23444 90 第9趟: 0 1 2 4 6 7 8 24 90 23444 123 第10趟: 0 1 2 4 6 7 8 24 90 123 23444执行的趟数是固定的
//冒泡排序实现二 设置一个标志,如果这一趟发生了交换,则为true,否则为false。明显如果有一趟没有发生交换,说明排序已经完成Integer[] aa = {1,2,4,6,7,8,90,123,0,23444,24};
        boolean flag = true;
        Integer n = aa.length;
        while (flag){
                flag = false;
                for ( int j = 0 ; j < n - 1 ; j++ ) {
                    if ( aa[j] > aa[j + 1] ) {
                        int temp = aa[j];
                        aa[j] = aa[j + 1];
                        aa[j + 1] = temp;
                        flag = true; //如果存在数据交换,则给flag赋true
                    }
                }
                n--;
                System.out.print("第" + ( aa.length - n) + "趟:");
                for ( int k = 0 ; k < aa.length ; k++ ) {
                    System.out.print(" "+ aa[k]);
                }
                System.out.println(" ");
        }

执行结果:第1趟: 1 2 4 6 7 8 90 0 123 24 23444 第2趟: 1 2 4 6 7 8 0 90 24 123 23444 第3趟: 1 2 4 6 7 0 8 24 90 123 23444 第4趟: 1 2 4 6 0 7 8 24 90 123 23444 第5趟: 1 2 4 0 6 7 8 24 90 123 23444 第6趟: 1 2 0 4 6 7 8 24 90 123 23444 第7趟: 1 0 2 4 6 7 8 24 90 123 23444 第8趟: 0 1 2 4 6 7 8 24 90 123 23444 第9趟: 0 1 2 4 6 7 8 24 90 123 23444
//冒泡排序实现三,标记了最后交换的位置,即下一次循环的终止位置,省去不比较的比较,因为flag后面的位置已经有序了Integer flag = aa.length;
        Integer count = 0;
        while (flag > 0 ){
                Integer n = flag;
                flag = 0;
                for ( int j = 0 ; j < n - 1 ; j++ ) {
                    if ( aa[j] > aa[j + 1] ) {
                        int temp = aa[j];
                        aa[j] = aa[j + 1];
                        aa[j + 1] = temp;
                        flag = j + 1; //如果存在数据交换,则给flag赋true
                    }
                }
                System.out.print("第" + (++count) + "趟:");
                for ( int k = 0 ; k < aa.length ; k++ ) {
                    System.out.print(" "+ aa[k]);
                }
                System.out.println(" ");
        }
时间: 2024-12-25 05:57:56

Java实现八大排序之冒泡排序的相关文章

八大排序算法——冒泡排序(动图演示 思路分析 实例代码java 负杂度分析)

一.动图演示 二.思路分析 1.  相邻两个数两两相比,n[i]跟n[j+1]比,如果n[i]>n[j+1],则将连个数进行交换, 2.  j++, 重复以上步骤,第一趟结束后,最大数就会被确定在最后一位,这就是冒泡排序又称大(小)数沉底, 3.  i++,重复以上步骤,直到i=n-1结束,排序完成. 三.负杂度分析 1.  不管原始数组是否有序,时间复杂度都是O(n2), 因为没一个数都要与其他数比较一次,(n-1)2次,分解:n2+2n-1,  去掉低次幂和常数,剩下n2,所以最后的时间复杂

Java实现八大排序算法

本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排序算法,他们之间关系如下: 稳定与非稳定: 如果一个排序算法能够保留数组中重复元素的相对位置则可以被称为是 稳定 的.反之,则是 非稳定 的. 直接插入排序 基本思想 通常人们整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置.在计算机的实现中,为了要给插入的元素腾出空间,我

八大排序之冒泡排序;

/*八种排序之冒泡排序*///冒泡排序的原理是:从左到右,相邻元素进行比较.每次比较一轮,//就会找到序列中最大的一个或最小的一个.这个数就会从序列的最右边冒出来./*  1. 比较相邻的元素.如果第一个比第二个大,就交换他们两个.  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数.  3. 针对所有的元素重复以上的步骤,除了最后一个.  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较.*//*双向链表过程:1.

java之八大排序

的关系:  1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 也是排好顺序的.如此反复循环,直到全部排好顺序. (2)实例  (3)用java实现 package com.njue; public class insertSort { public insertSort(){ inta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98

java常用八大排序法

最近查资料发现java排序挺有意思的,其中包含常见八种具有代表性的排序法:笔者觉得排序的功能重要,但更重要的是排序的思想:所以简单叙述一下常见排序方法名称,并用代码举例. A.插入排序(直接插入排序.希尔排序);B.交换排序(冒泡排序.快速排序);C.选择排序(直接选择排序.堆排序);D.归并排序;E.分配排序(基数排序); 所需辅助空间最多:归并排序;所需辅助空间最少:堆排序;平均速度最快:快速排序; 不稳定:快速排序,希尔排序,堆排序. 代码块: package com.sinolife.m

Java基础——选择排序、冒泡排序

1.选择排序 原理是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来, 顺序放入新数组,直到全部拿完 代码演示: 1 public class Test3 { 2 public static void main(String[] args) { 3 int[] arr = { 3, 9, 81, 8, 5, 10 }; 4 selectSort(arr); 5 print(arr); 6 } 7 8 /* 选择排序:原理是第i个元素和剩余元素的比较次数 */ 9 publ

八大排序之冒泡排序

一.基本思想 冒泡排序是一种基于数值交换的排序,从第一个元素开始,与后面紧接着的一个元素比较,如果当前这个数更大,则交换两者的数值,那么值更大的元素就像泡泡一样往后走.第n趟排序即可使第n大元素从前往后走.进行n-1次这样的"冒泡操作"后,整个序列就有序了. 二.实现代码 public class BubbleSort implements ISort{ public void sort(int[] a) { for(int i = 0; i <= a.length - 3; i

八大排序算法Java(转)

目录(?)[-] 概述 插入排序直接插入排序Straight Insertion Sort 插入排序希尔排序Shells Sort 选择排序简单选择排序Simple Selection Sort 选择排序堆排序Heap Sort 交换排序冒泡排序Bubble Sort 交换排序快速排序Quick Sort 归并排序Merge Sort 桶排序基数排序Radix Sort 总结 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序

算法基础——经典八大排序算法的Java及Python实现

概述 八大排序算法不用多说了,程序员算法基础必须要掌握的,现在总结一下加深记忆.下图是这八大排序算法的分类.名称.时间空间复杂度,以及稳定性. 代码 以下是经典八大排序算法的Java及Python代码,都是基于经典算法书籍<算法导论>里的伪代码实现的,我在关键语句部分附上了注释. 按照上图中的顺序分别介绍八大排序算法的实现(升序),前面是Java,后面是Python.Java的排序函数写在了一个类里,Python的排序函数则直接写出来了. 直接插入排序 public class InsertS