冒泡排序详解

冒泡排序可以说是排序中一个十分重要的内容,很多时候都会遇到,比如面试,考试等。下面就来写一写冒泡排序,也可以加深一下自己的理解。

冒泡排序原理,依次比较相邻的两个元素,把较大的元素移至后端;每趟排序找出较大的值放在后端。

给定一个数组,例如[2,8,4,6,1];

第一趟排序:将8移至后端

  第一次排序:[2,8,4,6,1];  //比较2和8,位置不变

  第二次排序:[2,4,8,6,1];  //比较8和4,将8移至4的后面

  第三次排序:[2,4,6,8,1];  //比较8和6,将8移至6的后面

  第四次排序:[2,4,6,1,8];  //比较8和1,将8移至1的后面

第二趟排序:将6移至后端

  第一次排序:[2,4,6,1,8];  //比较2和4,位置不变

  第二次排序:[2,4,6,1,8];  //比较4和6,位置不变

  第三次排序:[2,4,1,6,8];  //比较6和1,将6移至1的后面

第三趟排序:将4移至后端

  第一次排序:[2,4,1,6,8];  //比较2和4,位置不变

  第二次排序 : [2,1,4,6,8];  //比较4和1,将4移至1的后面

第四次排序:将2移至后端

  第一次排序:[1,2,4,6,8];  //比较2和1,将2移至1的后面

冒泡排序代码如下:

for(int i=0;i<arr.length-1;i++){
    for(int j=0;j<arr.length-1-i;j++){
    if(arr[j]>arr[j+1]){
        int temp = arr[j];
        arr[j] = arr[j+1];
        arr[j+1] = temp;
        }
    }
}
            

时间复杂度:

1.如果数组是顺序的,则一趟排序即可,进行n-1次比较,时间复杂度为O(n);

2.如果数组是逆序的,则需要n-1趟排序,每次n-i趟比较,时间复杂度为O(n2);

综上,冒泡排序平均时间复杂度为O(n2);

时间: 2024-10-19 12:06:57

冒泡排序详解的相关文章

菜鸟之Java小知识点--冒泡排序详解

冒泡排序额思想简单来说就是:相邻两个数比较,将最大额或者最小的放在最后 下面分析一个数组[21,78,52,18,34,11]进行从大到小排序. 如下图.为第一轮比较的过程,依次比较相邻两个元素,第一轮比较完后将最大的78放在了最后 第一轮:比较了5次,交换 4次 第二轮:比较了4次,交换 3次 第三轮:比较了3次,交换 1次 第四轮:比较了2次,交换 1次 第五轮:比较了1次,交换 1次 统计:6个元素总共比较了5轮,比较了15次,交换 10次 公式:比较轮数=n-1轮, 比较次数=n*(n-

C#冒泡排序详解

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 冒泡排序 { class Program { static void Main(string[] args) { int[] numbers = { 45, 86, 98, 64, 35, 65, 49, 86, 12, 26 }; //定义一个要排序的数组,这里可以随便写多少个数 for (int i =

C#冒泡排序--详解

思路:以数组int[]a={55,42,15,3,66,52};为例. 每一轮排序都把最大的数放在最后 所以, 对应循环语句思路 这样就很清晰了. 代码如下: 1 int[] a = { 2, 45, 34, 22, 9, 78, 67, 98 }; 2 for (int i = 0; i < a.Length-1; i++) 3 { 4 for (int j = 0; j < a.Length-i-1; j++) 5 { 6 if (a[j]>a[j+1]) 7 { 8 int tmp

js冒泡排序详解

因为过一阵要面试 大厂都比较注重算法题 所以今天练习一个简单的冒泡算法 冒泡算法的基本原理为: 1.比较相邻的两个数 如果第一个数比第二个数大 那么就交换位置 2.那么每次比较一轮之后 最大的数将会到最右侧 3.所以综上方法对于长度为n的数组需要比较n-1次之后才能使数组排序完毕(为什么是n-1 因为最后就剩1个 他没的比了 他就是最小的) 4.那么每批次比的时候因为之前已经把最大的挑出来放到左边已经固定 所以每批次比就少1次 如果比了n批就少n次 由此我们可以写出代码 function mao

C语言标准库函数qsort详解

1 函数简介 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *)); 参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序 2 基本用法 使用qsort()排序并用 bsearch()搜索是一个比较常用的组合,使用方便快捷. qsort 的函数原型是

《招一个靠谱的移动开发》iOS面试题及详解(上篇)

多线程.特别是NSOperation 和 GCD 的内部原理. 运行时机制的原理和运用场景. SDWebImage的原理.实现机制.如何解决TableView卡的问题. block和代理的,通知的区别.block的用法需要注意些什么. strong,weak,retain,assign,copy nomatic 等的区别. 设计模式,mvc,单利,工厂,代理等的应用场景. 单利的写法.在单利中创建数组应该注意些什么. NSString 的时候用copy和strong的区别. 响应值链. NSTi

(转)详解八大排序算法

概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短: 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到

20160206.CCPP体系详解(0016天)

代码片段(01):.指针.c+02.间接赋值.c 内容概要:内存 ///01.指针 #include <stdio.h> #include <stdlib.h> //01.取地址操作符(&)详解: // 1.操作对象:变量名(实质:内存实体|数据实体) // 2.操作特点:属于寄存器操作(操作结果不是内存实体) // (1).取地址操作(&变量名)是在CPU的寄存器区域所完成的操作; // (2).地址数据不占用内存,内存地址是在CPU核心构成组件寄存器产生的, /

javascript常用经典算法实例详解

javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与使用技巧,需要的朋友可以参考下 本文实例讲述了javascript常用算法.分享给大家供大家参考,具体如下: 入门级算法-线性查找-时间复杂度O(n)--相当于算法界中的HelloWorld ? 1 2 3 4 5 6 7 8 9 10 //线性搜索(入门HelloWorld) //A为数组,x为要