首页 > 其他分享 >冒泡排序

冒泡排序

时间:2023-03-12 19:55:30浏览次数:33  
标签:tmp arr int 冒泡排序 比较 out

简述

原理是相邻的两两元素做比较并往后移动,每轮可以选出一个最值

故最多n-1轮排完

每轮最多比较n-1-已完成轮数次

总共最多比较n*(n-1)/2次

比较并交换可以通过中间变量暂存交换值来处理

基本冒泡排序

/**
 * 冒泡排序
 * 时间复杂度On2,空间复杂度O1
 * 执行n-1轮
 * 每轮比较n-1-i次,总共比较n*(n-1)/2次
 * 最大交换n*(n-1)/2次——最坏情况:倒序
 * @author 夜神
 */
public class BubSort {

    /**
     * 向前比较 int j=arr.length-1;j>i;j--
     * @param arr
     */
    public static void forwardSort(int[] arr){
        int tmp=0;
        int count=0;
//        总共比较次数,也是最大交换次数(最坏情况:倒序)
        int compare=0;
//        n-1轮排完序,i控制轮数,隐含已经排好序的个数
        for(int i=0;i<arr.length-1;i++){
//            每轮比较n-1-i次    前序排列写法,往前面比较
            for (int j=arr.length-1;j>i;j--){
                compare++;
//             这里比较关系用的<,选取的是小值   小的向前移,拍好的在左边
                if (arr[j]<arr[j-1]){
                    tmp=arr[j];
                    arr[j]=arr[j-1];
                    arr[j-1]=tmp;
                    count++;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
        System.out.println("交换"+count+"次");
        System.out.println(compare+"次比较");
    }

    /**
     * 向后比较
     * 次数那里的另外一种写法 j<arr.length-1-i j从0开始,后续排列
     * @param arr
     */
    public static void backwardsSort(int[] arr){
//        交换次数
        int count=0;
//        总共比较次数,也是最大交换次数(最坏情况:倒序)
        int compare=0;
        int tmp;
//        n-1轮 i 属于[0,n-1),即[0,n-2]
        for (int i=0;i<arr.length-1;i++){
//            每轮比较n-1-i次 总共(n-1)-0+(n-1)-1+(n-1)-2+....=(n-1)*(n-1)-(0+1+2+...+n-1-1)=(n-1)*(n-1)-(n-2)*(n-1)/2=n*(n-1)/2
            for(int j=0;j<arr.length-1-i;j++){
                compare++;
                if (arr[j]>arr[j+1]){
                    tmp=arr[j+1];
                    arr[j+1]=arr[j];
                    arr[j]=tmp;
                    count++;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
        System.out.println("交换"+count+"次");
        System.out.println(compare+"次比较");

    }
}

 

标签:tmp,arr,int,冒泡排序,比较,out
From: https://www.cnblogs.com/deity-night/p/17208919.html

相关文章

  • 经典的排序算法 - 冒泡排序
    冒泡排序算法应该可以说是很经典的一种对数据进行排序的的算法了,甚至在很多的介绍算法的数据中,它可能还是放在最前面开始讲解的。冒泡排序算法到底是咋样的呢?冒泡这个说法又......
  • 用冒泡排序模拟qsort的实现
    #include<stdio.h>#include<stdlib.h>#include<string.h>//交换voidswap(char*arr1,char*arr2,intwidth){inti=0;for(i=0;i<width;i++){chararr......
  • 冒泡排序
    原理第一个元素如果大于第二个元素比较,则他们位置调换。假设有6个元素,需要经过6*6=36次循环。 代码/***升序**@paramnumArr*@ret......
  • 冒泡排序(简单C++实现)
    实现代码如下://bubble_sort.cpp#include<stdio.h>voidprintArray(intarr[],intlen);//冒泡排序:最多进行n-1次排序intmain(){intarr[]={23,39,65,2......
  • php快速排序和冒泡排序
    <?phpfunctionmaopao($arr){if(!is_array($arr)){return$arr;}$count=count($arr);if($count<=1){return$arr;}for......
  • 【NOI2018】冒泡排序
    【NOI2018】冒泡排序Description最近,小S对冒泡排序产生了浓厚的兴趣。为了问题简单,小S只研究对\(1\)到\(n\)的排列的冒泡排序。下面是对冒泡排序的算法描述。......
  • 冒泡排序
    冒泡排序对N个数据进行排序,共进行N-1轮排序,每一轮都从第一个数据向后面比较(假如从小向大排列),若前面的数据大于后面的数据,则交换位置,再让第二个数据与第三个比较,以此类推......
  • java-数组,冒泡排序19
    packagecom.demo.data;publicclassarr{publicstaticvoidmain(String[]args){int[]arr={11,22,33,44,999};intmax=m(arr);......
  • 冒泡排序及其优化
    importjava.util.Arrays;publicclassbobbleSort{publicstaticvoidmain(String[]args){int[]arr={2,6,3,7,4,1,8,5,0,9};//......
  • LabVIEW|冒泡排序的实现
    冒泡排序简述:描述来自于大的泡泡总是先浮到水面。考虑一下,我们平时怎么给东西排序,比如有一堆苹果,需要我们按照个头从大到小排序。冒泡排序就是:先比较最右面两个苹果,如果左边......