问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

冒泡排序过程

发布网友 发布时间:2022-05-20 12:18

我来回答

2个回答

好二三四 时间:2022-06-13 06:53

排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。以下是冒泡排序算法:

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

作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来

说并没有什么太大作用。

1. 算法步骤

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

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

2. 动图演示

3. 什么时候最快

当输入的数据已经是正序时(都已经是正序了,我还要你冒泡排序有何用啊)。

4. 什么时候最慢

当输入的数据是反序时(写一个 for 循环反序输出数据不就行了,干嘛要用你冒泡排序呢,我是闲的吗)。

5. JavaScript 代码实现

实例

function bubbleSort(arr) {
    var len = arr.length;
    for (var i = 0; i < len - 1; i++) {
        for (var j = 0; j < len - 1 - i; j++) {
            if (arr[j] > arr[j+1]) {        // 相邻元素两两对比
                var temp = arr[j+1];        // 元素交换
                arr[j+1] = arr[j];
                arr[j] = temp;
            }
        }
    }
    return arr;
}

6. Python 代码实现

实例

def bubbleSort(arr):
    for i in range(1, len(arr)):
        for j in range(0, len(arr)-i):
            if arr[j] > arr[j+1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

7. Go 代码实现

实例

func bubbleSort(arr []int) []int {
        length := len(arr)
        for i := 0; i < length; i++ {
                for j := 0; j < length-1-i; j++ {
                        if arr[j] > arr[j+1] {
                                arr[j], arr[j+1] = arr[j+1], arr[j]
                        }
                }
        }
        return arr
}

8. Java 代码实现

实例

public class BubbleSort implements IArraySort {

    @Override
    public int[] sort(int[] sourceArray) throws Exception {
        // 对 arr 进行拷贝,不改变参数内容
        int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);

        for (int i = 1; i < arr.length; i++) {
            // 设定一个标记,若为true,则表示此次循环没有进行交换,也就是待排序列已经有序,排序已经完成。
            boolean flag = true;

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

                    flag = false;
                }
            }

            if (flag) {
                break;
            }
        }
        return arr;
    }
}

9. PHP 代码实现

实例

function bubbleSort($arr)
{
    $len = count($arr);
    for ($i = 0; $i < $len - 1; $i++) {
        for ($j = 0; $j < $len - 1 - $i; $j++) {
            if ($arr[$j] > $arr[$j+1]) {
                $tmp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $tmp;
            }
        }
    }
    return $arr;
}

10. C 语言

实例

#include <stdio.h>
void bubble_sort(int arr[], int len) {
        int i, j, temp;
        for (i = 0; i < len - 1; i++)
                for (j = 0; j < len - 1 - i; j++)
                        if (arr[j] > arr[j + 1]) {
                                temp = arr[j];
                                arr[j] = arr[j + 1];
                                arr[j + 1] = temp;
                        }
}
int main() {
        int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };
        int len = (int) sizeof(arr) / sizeof(*arr);
        bubble_sort(arr, len);
        int i;
        for (i = 0; i < len; i++)
                printf("%d ", arr[i]);
        return 0;
}

11. C++ 语言

实例

#include <iostream>
using namespace std;
template<typename T> //整数或浮点数皆可使用,若要使用类(class)或结构体(struct)时必须重载大于(>)运算符
void bubble_sort(T arr[], int len) {
        int i, j;
        for (i = 0; i < len - 1; i++)
                for (j = 0; j < len - 1 - i; j++)
                        if (arr[j] > arr[j + 1])
                                swap(arr[j], arr[j + 1]);
}
int main() {
        int arr[] = { 61, 17, 29, 22, 34, 60, 72, 21, 50, 1, 62 };
        int len = (int) sizeof(arr) / sizeof(*arr);
        bubble_sort(arr, len);
        for (int i = 0; i < len; i++)
                cout << arr[i] << ;
        cout << endl;
        float arrf[] = { 17.5, 19.1, 0.6, 1.9, 10.5, 12.4, 3.8, 19.7, 1.5, 25.4, 28.6, 4.4, 23.8, 5.4 };
        len = (float) sizeof(arrf) / sizeof(*arrf);
        bubble_sort(arrf, len);
        for (int i = 0; i < len; i++)
                cout << arrf[i] << <<endl;
        return 0;
}

12. C#

实例

static void BubbleSort(int[] intArray) {
    int temp = 0;
    bool swapped;
    for (int i = 0; i < intArray.Length; i++)
    {
        swapped = false;
        for (int j = 0; j < intArray.Length - 1 - i; j++)
            if (intArray[j] > intArray[j + 1])
            {
                temp = intArray[j];
                intArray[j] = intArray[j + 1];
                intArray[j + 1] = temp;
                if (!swapped)
                    swapped = true;
            }
        if (!swapped)
            return;
    }
}

13. Ruby

实例

class Array
  def bubble_sort!
    for i in 0...(size - 1)
      for j in 0...(size - i - 1)
        self[j], self[j + 1] = self[j + 1], self[j] if self[j] > self[j + 1]
      end
    end
    self
  end
end

puts [22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70].bubble_sort!

14. Swift

实例

import Foundation

func bubbleSort (arr: inout [Int]) {
    for i in 0..<arr.count - 1 {
        for j in 0..<arr.count - 1 - i {
            if arr[j] > arr[j+1] {
                arr.swapAt(j, j+1)
            }
        }
    }
}

// 测试调用

func testSort () {
    // 生成随机数数组进行排序操作
    var list:[Int] = []
    for _ in 0...99 {
        list.append(Int(arc4random_uniform(100)))
    }
    print("(list)")
    bubbleSort(arr:&list)
    print("(list)")
}

原文地址:https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/1.bubbleSort.md

参考地址:https://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F

以下是热心网友对冒泡排序算法的补充,仅供参考:

热心网友提供的补充1:

改进版冒泡排序

Python 实现:

def bubbleSort(arr):
    for i in range(len(arr) - 1, 0, -1):  # 反向遍历
        for j in range(0, i):  # 由于最右侧的值已经有序,不再比较,每次都减少遍历次数
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

Go 实现:

func bubbleSort(arr []int) []int {
    for i := len(arr) - 1; i > 0;i-- { // 反向遍历
        for j := 0; j < i; j++ {
            if arr[j] > arr[j + 1]{
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
            }
        }
    }
    return arr
}

热心网友提供的补充2:

啦~~~只是多了一个哪里已经有序的下表而已呀~~~性能提升了不少呢~~~

def bubble_sort(list):
    k = len(list) - 1
    pos = 0
    for i in range(len(list) - 1):
        flag = False
        for j in range(k):
            if list[j] > list[j + 1]:
                tmp = list[j]
                list[j] = list[j + 1]
                list[j + 1] = tmp
                flag = True
                pos = j
        k = pos
        if flag == False:
            break
    return list
import threading
from random import *
from time import *

class Thread(threading.Thread):   
    def __init__(self,f):
        threading.Thread.__init__(self)
        self.input = None
        self.returnval = None
        self.f = f
    def run(self):                   
        if self.input != None:
            self.returnval = self.f(self.input)
        else:
            self.returnval = self.f()

再来开个多线程~~~顺便加个条件才开多线程~~~性能提升的不是一点点呢~~~

以上为冒泡排序算法详细介绍,插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等排序算法各有优缺点,用一张图概括:

关于时间复杂度

平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。

线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序;

O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序

线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。

关于稳定性

稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。

不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。

名词解释:

n:数据规模

k:"桶"的个数

In-place:占用常数内存,不占用额外内存

Out-place:占用额外内存

稳定性:排序后 2 个相等键值的顺序和排序之前它们的顺序相同

热心网友 时间:2022-06-13 04:34

1:比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2:对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3:针对所有的元素重复以上的步骤,除了最后一个。
4:持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
什么是冒泡排序算法

冒泡排序算法:重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序...

什么叫做冒泡排序?

有8个数组成一个无序数列:5,8,6,3,9,2,1,7,希望从小到大排序。按照冒泡排序的思想,我们要把相邻的元素两两比较,根据大小来交换元素的位置,过程如下:首先让5和8比较,发现5比8要小,因此元素位置不变。接下来让8和6比较,发现8比6要大,所以8和6交换位置。请点击输入图片描述 请...

冒泡排序算法

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可...

用php写出代码:3,6,7,1,8,2,9,4,5,0按照从小到大的顺序输出数组的值...

这个问题,可以采用经典的冒泡排序。冒泡排序的过程如下:1.比较相邻的元素。如果第一个比第二个大,就交换顺序。2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。最后的元素会是最大的数。3.针对所有的元素重复以上的步骤,除了最后一个。4.持续每次对越来越少的元素重复上面的步骤...

用冒泡排序将122,126,124,128,118,130,135,132进行升序排序?

下面是使用冒泡排序算法将给定数字序列升序排序的过程:从序列的第一个元素开始,比较相邻两个元素的大小,如果前一个元素比后一个元素大,则交换它们的位置。第一次遍历后序列变为:122, 124, 126, 118, 128, 130, 132, 135 继续遍历序列中剩下的元素,重复上述比较和交换操作。第二次遍历后序列...

C语言的冒泡排序是什么?求解释

所谓冒泡排序即:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟...

对学生成绩表(只有总成绩),请分别用冒泡排序和快速排序算法,对成绩表...

冒泡排序是一种交换排序方式。设有n个数据依次放在数组元素a(1)至a(n)中,用冒泡法对这n个数据进行递增排序的过程为:先比较a(1)与a(2),若逆序则交换之,接着比较a(2)与a(3),若逆序就交换……依次进行,知道将a(n-1)与a(n)比较交换完,才算完成了第一轮比较交换。然后以同样规则进行...

快速排序和冒泡排序算法

冒泡排序的实现过程:快速排序的思想是在一个需要排序的数组A中首先选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的树都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法。一般快速排序的算法是:快速排序实现...

45 43 56 32 15冒泡排序

首先,对于给定的数字序列45,43,56,32,15进行冒泡排序,我们可以得到排序后的结果为:15,32,43,45,56。冒泡排序是一种简单的排序算法,其工作原理是重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该...

C语言:编写一个程序用冒泡排序实现升序排列

1、首先打开一个空白的C语言文件,首先先定义一组待排序的数列以及各个变量,接着就是用来处理排序的逻辑:2、冒泡排序的逻辑是一组数从第一个数值开始,如果相邻两个数的排列顺序与期望不同,则将两个数的位置进行交换,重复这样的过程直到最后一个数不需要交换则排序完成,如果有N个数需要排序,则...

简单写一下冒泡排序算法 简述冒泡排序的基本过程 C语言冒泡排序代码 45 43 56 32 15冒泡排序 冒泡排序定义 冒泡排序3个数 冒泡排序5个数从大到小 冒泡排序例子 冒泡排序从大到小排序代码
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么我不像别人那样有一个温暖幸福的原生家庭,是我天生就不配拥有吗... 行政拘留的探望时间具体是多久 亚急性心内膜炎血培养标本采血量是多少 属羊的女人几月出生命最好 你配幸福吗?|心理深剖(原创) 属羊的女孩子哪月出生好? 我是坏女生、坏女生……配得到幸福和快乐么? 我配拥有幸福麽?我注定是上帝遗弃的那个孩子,是不是我已经拥有幸福的资... 要和女朋友去南京旅游,顺便品尝一下特色小吃,求美食达人推荐几个老字号... ...听说南京的小吃特别好吃,请介绍几个地道的,比较好吃的,南京本地人... 公司取名“桦森”是什么样的寓意? 在感情中如何做一个聪明的女人? 如何相夫,做个智慧女人? 怎样在二婚里做个聪明女人, 在婚姻中要做智慧女人? 懒洋洋是公的还是母的? 懒羊羊为什么那么懒? 懒洋洋为什么那么懒??? 有懒洋洋的懒的成语 懒洋洋的懒的组词 放屁很响又很臭怎么办 总是放屁还臭还响是怎么回事 小毛病大秘密:为什么放屁会特别响特别臭 最近老是爱放屁还臭是怎么回事? 洋洋平时很活泼,突然之间沉默寡言该怎么办? 找一有特殊符号带有洋洋的网名 小猴子得意扬扬的原因是? 得意洋洋 洋洋的解释 - -表情是什么意思,QQ扣鼻饲表情比喻什么什么用意,- .-表情什么意思 我问她 我们就这样结束了是吗 她发了一个叹气的表情什么意思 c语言中用冒泡排序法排列任意输入的10个数,用程序输出从小到大的排列... 怎样清洗假发,才不会让假发受损害 自驾游最好的选择,紧凑型suv,就选大众探岳! 想去浙江温州旅游,需要提前做好哪些攻略呢? 从温州到西塘乌镇两个地方玩,求具体路线 住宿和游玩攻略,大概玩三天,两个人需要带多少钱~ 温州旅游有什么好玩的 温州旅游全新攻略 适合办厂的项目有哪些 上海哪家相亲机构是诚信相亲机构示范单位? 中华九大仙草之首,黑石仙草霍山石斛产自那里 请问:上海哪家婚姻介绍所是诚信相亲单位? 肉丸子,怎么做好吃 哪家上海相亲机构是正规诚信企业? 上海沃得曼婚介是诚信示范相亲机构吗? 上海最好最诚信的白领婚恋相亲机构是哪家? 上海哪家相亲平台是线下实地经营,经过备案的正规机构? 上海哪家相亲机构获得了2018诚信相亲优秀单位? 邳州市,这是个什么州啊,拼音怎么拼啊 诚信不骗人的相亲平台有哪些? 邳州的邳怎么拼音啊? 邳州的邳怎么念啊?属于哪个省? 手头没有字典, 上海哪家婚介是正规的?