热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python哪种算法效率最高_冒泡排序算法的C++,Java和Python实现和冒泡排序算法三种语言效率的比较...

冒泡排序原理:这一篇百度经验讲得很好,我不多说了他讲的是C语言,没有关系,冒泡原理都是一样的空间复杂度是O(1)时间最优复杂

冒泡排序原理:

这一篇百度经验讲得很好,我不多说了

他讲的是C语言,没有关系,冒泡原理都是一样的

空间复杂度是O(1)

时间最优复杂度是O(n),时间最差复杂度是O(n^2);

时间最优复杂度推导

假如我们要对一个数组1,2,4,5进行升序排序,我们第一趟循环就完成了,即3次,理想的情况下只需排序一趟,以此类推,n个数只需n-1次即可排序完成。所以复杂度是O(n)

时间最差复杂度推导

假如我们对一个数组5,4,2,1进行升序排序,这个数组正好是全降序,所以要三趟循环,第一趟比较3次,交换3次,第二趟比较2次,交换2次,第三趟比较1次,交换1次。所以是3*2*1=6次

继续推广,n个数在最差情况下需要n(n-1)/2次比较和交换才能完成,所以时间复杂度为O(n^2)

C++实现

/**

* @author cjy

* @Date 2018/6/19 15:00.*/#include#include

using namespacestd;void print(int a[],intn)

{for (int k = 0; k

{

cout<

}

}intmain()

{

clock_t startTime, endTime;

startTime&#61;clock();int a[8] &#61; { 5,9,7,6,1,8,13,4};//获取数组的长度

int n &#61; sizeof(a) / sizeof(a[0]);//第一个元素只需要和n-1个元素进行比较//第二个元素只需要和n-2个元素进行比较//以此类推

for (int i &#61; 0; i

{//第一个元素只需要和n-1个元素进行比较//第二个元素只需要和n-2个元素进行比较//以此类推

for (int j &#61; 0; j

{//只要前面的元素大于后面的元素&#xff0c;立即交换

if (a[j] > a[j &#43; 1])

{int temp &#61;a[j];

a[j]&#61; a[j &#43; 1];

a[j&#43; 1] &#61;temp;

}

}

cout<<"第" <

print(a, n);

}

cout<<"最终结果" <

print(a, n);

endTime&#61;clock();

cout<<"Totle Time :" <<(double)(endTime - startTime)*1000 / CLOCKS_PER_SEC <<"ms" <

system("pause");return 0;

}

Java实现

package com.xgt.util;import java.lang.reflect.Method;/**

* &#64;author cjy

* &#64;Date2018/6/19 15:25.

*/

public class BubbleSort {

static void print(int[] arr,int n)

{

for(int k&#61;0;k

System.out.print(arr[k]&#43;",");}

System.out.println();}

private static final int a[] &#61; {5,9,7,6,1,8,13,4};public static void main(String[]args) throws NoSuchMethodException {

methodExecutionTime(BubbleSort.class.getMethod("bubbleSort", new Class[]{int[].class}));}

public static void bubbleSort(int[]a){

int n&#61; a.length; for(int i&#61;0;i

for(int j&#61;0;j

if(a[j]>a[j&#43;1]){

int temp&#61; a[j]; a[j] &#61; a[j&#43;1]; a[j&#43;1] &#61; temp;}

}

System.out.println("第"&#43;(i&#43;1)&#43;"个步骤"); print(a,n);}

System.out.println("最终结果"); print(a,n);}

/**

* 计算方法执行时间

* &#64;param method 所有方法都是Method类的对象

*/

private static void methodExecutionTime (Method method) {

long begin&#61; System.nanoTime();try {

method.invoke(new BubbleSort(), a);} catch (Exception e) {

e.printStackTrace();}

long end&#61; System.nanoTime() - begin; System.out.println(method.getName() &#43; "方法耗时&#xff1a;" &#43; end/1000 &#43; "纳秒");}

}

Python实现

#!/usr/bin/env python#coding:utf-8

importtimedefbubbleSort(nums):for i in range(len(nums)-1): #这个循环负责设置冒泡排序进行的次数

for j in range(len(nums)-i-1): #&#xff4a;为列表下标

if nums[j] > nums[j&#43;1]:

t&#61;nums[j];

nums[j]&#61; nums[j&#43;1];

nums[j&#43;1] &#61;t;print"第",i&#43;1,"步骤"

print(nums)returnnums

nums&#61; [5,9,7,6,1,8,13,4];

start&#61;time.time()

bubbleSort(nums)

end&#61;time.time()print (end-start)*1000000,"微秒"

语言

Java

Python

C&#43;&#43;

平均时间(ms)

1322

999

24

Java运行时间控制台截图

Python运行时间截图

C&#43;&#43;运行时间截图

效率排行&#xff1a;C&#43;&#43;>Python>Java



推荐阅读
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 2022年7月20日:关键数据与市场动态分析
    2022年7月20日,本文对当日的关键数据和市场动态进行了深入分析。主要内容包括:1. 关键数据的解读与趋势分析;2. 市场动态的变化及其对投资策略的影响;3. 相关经济指标的评估。通过这些分析,帮助读者更好地理解当前市场环境,为决策提供参考。 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 如何在PHP中准确获取服务器IP地址?
    如何在PHP中准确获取服务器IP地址? ... [详细]
  • 在C语言中,指针的高级应用及其实例分析具有重要意义。通过使用 `&` 符号可以获取变量的内存地址,而 `*` 符号则用于定义指针变量。例如,`int *p;` 定义了一个指向整型的指针变量 `p`。其中,`p` 代表指针变量本身,而 `*p` 则表示指针所指向的内存地址中的内容。此外,指针在不同函数中可以具有相同的变量名,但其作用域和生命周期会有所不同。指针的灵活运用能够有效提升程序的效率和可维护性。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ... [详细]
author-avatar
爱音乐的李雪梅
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有