冒泡排序原理

看到很多介绍冒泡排序的地方,包括教课书上个人感觉很多描述的都不是很清楚,也可能是我个人的理解能力差一点,但是从网上搜到得这张图看起来很清晰了,转发一下希望能帮助到有的朋友。

冒泡排序原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子。

或者可以这样描述冒泡排序:

就是将第一个记录的关键字和第二个记录的关键字进行比较,

如果后面的比前面的小则交换,然后比较第二个和第三个,依次类推。

比完一趟,最大的那个已经放到了最后的位置,这样就可以对前面N-1个数再循环比较。

稳定,时间复杂度 O(n^2)

实例 : //冒泡排序(数组排序) 

function bubble_sort($array) {
$count = count($array); 
if ($count <= 0) return false; 
for($i=0; $i<$count; $i++){ 
  for($j=$count-1; $j>$i; $j–){ 
    if ($array[$j] < $array[$j-1]){ 
      $tmp = $array[$j]; 
      $array[$j] = $array[$j-1]; 
      $array[$j-1] = $tmp; 
    } 
  } 

return $array; 

时间: 2024-11-03 20:54:14

冒泡排序原理的相关文章

冒泡排序原理及其java实现

冒泡排序原理: 临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样外层循环每循环一次,都会把一个数的顺序排好(从小到大的话每次都会把上回剩余的数据最大的放在剩余数的最后面,反之则是最小的放剩余数的最后面),过程如下: 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第一次两两比较6 > 2交换(内循环) 交换前状态| 6 | 2 | 4 | 1 | 5 | 9 | 交换后状态| 2 | 6 | 4 | 1 | 5 | 9 | 第二次两两比

Java_冒泡排序_原理及优化

冒泡排序及其优化 一.原理及优化原理 1.原理讲解 冒泡排序即:第一个数与第二个数进行比较,如果满足条件位置不变,再把第二个数与第三个数进行比较.不满足条件则替换位置,再把第二个数与第三个数进行比较,以此类推,执行完为一个趟,趟数等于比较的个数减一. 2.冒泡排序原理图示:(以98765序列为例,排序结果从小到大) 3.冒泡排序优化 优化版:每一次减少一次循环(即红色部分不需要在进行比较) 4.冒泡排序最终版 最终版:每一趟减少一次循环(删除线不需要再执行) 二.实现代码 1.冒泡排序实现主要代

C语言之冒泡排序算法

一.什么是冒泡排序?冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越大的元素会经由交换慢慢"浮"到数列的顶端,故名.二.冒泡排序的原理   冒泡排序原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头

冒泡排序详解

冒泡排序可以说是排序中一个十分重要的内容,很多时候都会遇到,比如面试,考试等.下面就来写一写冒泡排序,也可以加深一下自己的理解. 冒泡排序原理,依次比较相邻的两个元素,把较大的元素移至后端:每趟排序找出较大的值放在后端. 给定一个数组,例如[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的后面

冒泡排序算法可视化

在百度前端技术学院的任务列表那里看到了有一个任务是要求用javascript实现可视化的排序算法,感觉很有趣,就稍微研究了一下,本来是想实现冒泡排序算法和快速排序算法的可视化的,可是快速排序在要如何实现可视化这一步上感觉有一点难度,于是就暂时放弃了. 冒泡排序原理 冒泡排序我们应该都不陌生吧?很简单的两个for循环就可以实现了,其基本原理是:在一开始的时候,比较第一第二个数,如果如果第一个数比第二个数大的话则交换二者位置,在比较第二个和第三个数,同样的如果第二个数比第三个数大的话,则交换二者位置

数组冒泡排序、选择排序、二分查找法

1 数组高级冒泡排序原理图解[掌握] 画图演示 需求: 数组元素:{24, 69, 80, 57, 13} 请对数组元素进行排序. 冒泡排序 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处 2 数组高级冒泡排序代码实现[掌握] 案例演示 数组高级冒泡排序代码 package com.heima.array; public class Demo1_Array { public static void main(String[] args) { int[] arr = {24,

算法笔记_008:选择排序和冒泡排序【蛮力法】

目录 1 问题描述 2 解决方案 2.1 选择排序原理简介 2.2 具体编码(选择排序) 2.3 冒泡排序原理简介 2.4 具体编码(冒泡排序) 1 问题描述 给定一个可排序的n元素序列(例如,数字.字符和字符串),将它们按照非降序方式重新排列. 2 解决方案 2.1 选择排序原理简介 选择排序开始的时候,我们从第一个元素开始扫描整个列表,找到它的最小元素,然后和第一个元素交换,将最小元素和第一个元素交换位置:然后,我们从第二个元素开始扫描剩下的n-1个元素,找到这n-1个元素中的最小元素,将最

20160420冒泡排序和查找

2016-04-20 第12天 1:冒泡排序原理 1)比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 3)针对所有的元素重复以上的步骤,除了最后一个. 4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 目的:按从小到大排序. 方法:  假设存在数组:9, 10, 5, 8, 7, 4, 3, 1, 6, 2 第一轮比较相邻两个元素,如果左边元素大于右边元素,则

C 实现冒泡排序

#include <stdio.h> #define SIZE 8 void bubble_sort(int a[], int n); void bubble_sort(int a[], int n) { int i, j, temp; for (j = 0; j < n - 1; j++) for (i = 0; i < n - 1 - j; i++) { if (a[i] > a[i + 1]) { temp = a[i + 1]; a[i + 1] = a[i]; a[