排序(冒泡)

一、冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序算法的运作如下:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

package BubbleSort;

import java.util.Arrays;

public class Demo01
{
    //第一版本
    static void BubbleSort(int[] arr){
        int len = arr.length;
        for(int j=0;j<len-1;j++){
            for(int i=0;i<len-1;i++)
            {

                if(arr[i]>arr[i+1]){
                    int temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
            System.out.println(Arrays.toString(arr));
        }

    }

    //第二版本  每一趟减少每一趟的次数
    static void BubbleSortSecond(int[] arr){
        int len = arr.length;
        for(int j=0;j<len-1;j++)
        {
            for(int i=0;i<len-1-j;i++)
            {
                if(arr[i]>arr[i+1])
                {
                    int temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
            System.out.println(Arrays.toString(arr));
        }
    }

    //第三版本
    /**
     * 最终版:假设数据已经有序,后者经过某趟后有序,减少趟数
     * 如 81234
     * 第一趟  12348
     * 第二趟  12348
     * @param args
     */
    static void BubbleSortThird(int[] arr){
        boolean sorted = true;
        int len = arr.length;
        for(int j=0;j<len-1;j++)
        {
            sorted = true;//假定有序
            for(int i=0;i<len-1-j;i++)
            {
                if(arr[i]>arr[i+1])
                {
                    int temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                    sorted = false;//假定失败
                }
            }
            System.out.println(Arrays.toString(arr));
            if(sorted){
                break;
            }
        }
    }

    public static void main(String[] args) {
        System.out.println("===========1============");
        int[] arr = {9,2,7,3,4};
        BubbleSort(arr);
        System.out.println("===========2============");
        arr = new int[] {9,1,7,3,4};
        BubbleSortSecond(arr);
        System.out.println("===========3============");
        arr = new int[] {9,1,7,3,4};
        BubbleSortThird(arr);
    }
}

运行结果:

===========1============
[2, 7, 3, 4, 9]
[2, 3, 4, 7, 9]
[2, 3, 4, 7, 9]
[2, 3, 4, 7, 9]
===========2============
[1, 7, 3, 4, 9]
[1, 3, 4, 7, 9]
[1, 3, 4, 7, 9]
[1, 3, 4, 7, 9]
===========3============
[1, 7, 3, 4, 9]
[1, 3, 4, 7, 9]
[1, 3, 4, 7, 9]
时间: 2024-08-07 17:00:57

排序(冒泡)的相关文章

python 数据结构与算法之排序(冒泡,选择,插入)

目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 计算机重要的几门课: 1.数据结构和算法 2.网络 3.操作系统 4.计算组成原理 数据结构与算法: 算法: 衡量算法的标准: 时间复杂度:就是程序代码执行的大概次数 小结: 时间复杂度是用来估计算法运行时间的一个式子(单位) 一般来说,时间复杂度高的算法比复杂度低的算法慢 常见的

Java数据结构与算法(2) - 排序(冒泡、插入和选择排序)

排序需要掌握的有冒泡排序,插入排序和选择排序. 冒泡排序: 外层循环从后往前,内存循环从前往后到外层循环,相邻数组项两两比较,将较大的值后移. 插入排序: 从排序过程的中间开始(程序从第二个数组项开始a[1]),此时队列已经拍好了一部分.此时,将后边的数组项一次插入到已经排好序的部分队列中. 选择排序: 从第一个数组项开始,找到包括该数组项在内的所有往后数组项中的最小项与当前项进行交换,其实相当于依次将最小值往前冒泡. 示例代码: package chap03.BubbleSort; // bu

php 常用四种排序 冒泡,选择,插入,快排

---恢复内容开始--- 1冒泡排序.  [为描述方便,例子全面为升序排列] 简述:假设数组有10个数字,从左向右.依次比较,如果前者大于后者,则两两交换.每一轮将冒泡一个最大数出来,依次循环,完成排序 流程描述:-- 第一次  a[0] 与 a[1]  比如果 a[0] > a[1]  则 a[0] 与 a[1] 交换,然后 a[1] 与 a[2] 交换,依次到  a[8] 与 a[9]  交换.  此轮过后  a[9] 必为  a[0-9]  中的最大值. 第二次(此时 a[9]以是最大值)

python排序(冒泡、直接选择、直接插入等)

冒泡排序 冒泡法:第一趟:相邻的两数相比,大的往下沉.最后一个元素是最大的. 第二趟:相邻的两数相比,大的往下沉.最后一个元素不用比. 1 #冒泡排序 2 array = [1,5,6,2,9,4,3] 3 def bubble_sort(array): 4 for i in range(len(array)-1): 5 for j in range(len(array)-i-1): 6 if array[j] > array[j+1]: 7 array[j],array[j+1] = arra

java面试准备之基础排序——冒泡与选择排序

选择排序: public void select(int[] arr){ for(int i=0;i<arr.length;i++){ for(int j=i+1;j<arr.length;j++){ if(arr[j]>arr[i]){ int one = arr[i]; arr[i]=arr[j]; arr[j]=one; } } } } 冒泡排序: public static int[] popo(int[] arr){ for(int i=0;i<arr.length-1;

排序 - 冒泡法(改进)

排序过程: 将第一个记录的关键字与第二个记录的关键字进行比较,若为逆序r[1].key > r[2].key,则交换:然后比较第二个记录与第三个记录:依次类推,直至第n - 1个记录和第n个记录比较为止,第一趟冒泡排序,结果关键字最大的记录被安置在最后一个记录上. 对前n - 1个记录进行第二趟冒泡排序,结果使关键字次大的记录被安置在第n - 1个记录位置. 重复上述过程,直到"在一趟排序过程中没有进行过交换记录的操作"为止. 时间复杂度O(n^2) 简单版: #include

排序-冒泡,归并,快排区别

快排: #include <iostream> #include <string.h> #include <stdio.h> #include <cmath> using namespace std; void Q_Sort(int a[],int low,int high) { if(low >= high) return; int first = low; int last = high; int key = a[first]; while(fir

JAVA排序(冒泡,直接选择,反转)

int[] arr = {45, 34, 53, 43}; 一,直接选择排序 System.out.println(Arrays.toString(arr)); for(int i=0;i<arr.length;i++) { int tem = i; for(int j=i;j<arr.length;j++) { if(arr[j] < arr[tem]) { tem = j; } } int temp1 = arr[i]; arr[i] = arr[tem]; arr[tem] = t

数据结构学习笔记06排序 (冒泡、插入、希尔)

前提void X_Sort ( ElementType A[], int N ) 大多数情况下,为简单起见,讨论从小大的整数排序 N是正整数 只讨论基于比较的排序(> = < 有定义) 只讨论内部排序 稳定性:任意两个相等的数据,排序前后的相对位置不发生改变 1.冒泡排序 (从小到大排序) 物理意义:大泡泡往下沉,小泡泡往上冒 每次比较相邻两个泡泡,符合条件,交换位置,每一轮比较完,最大的泡泡沉到最底下. 最好情况:顺序T = O( N )最坏情况:逆序T = O( N^2 ) 稳定 1 #i