热门标签 | 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



推荐阅读
  • 3144:[Hnoi2013]切糕TimeLimit:10SecMemoryLimit:128MBSubmit:1261Solved:700[Submit][St ... [详细]
  • ZOJ 2760 - 最大流问题
    题目链接:How Many Shortest Paths。题目描述:给定一个包含n个节点的有向图,通过一个n*n的矩阵来表示。矩阵中的a[i][j]值为-1表示从节点i到节点j无直接路径;否则,该值表示从i到j的路径长度。输入起点vs和终点vt,计算从vs到vt的所有不共享任何边的最短路径数量。如果起点和终点相同,则输出无穷大。 ... [详细]
  • SQLite是一种轻量级的关系型数据库管理系统,尽管体积小巧,却能支持高达2TB的数据库容量,每个数据库以单个文件形式存储。本文将详细介绍SQLite在Android开发中的应用,包括其数据存储机制、事务处理方式及数据类型的动态特性。 ... [详细]
  • 在一个婚礼上,有三对情侣即将步入婚姻的殿堂,分别由A、B、C三位男士与X、Y、Z三位女士组成。为了增添婚礼的乐趣,他们决定互相开玩笑,给出了误导性的信息。A声称他将与X结婚,X则表示她的未婚夫是C,而C说自己会与Z共结连理。然而,事后发现这些话都是假的。现在的问题是,真正的配对关系究竟是怎样的? ... [详细]
  • 本文详细介绍了使用Java语言来测量程序运行时间的方法,包括代码示例和实现步骤,旨在帮助开发者更好地理解和应用时间测量技术。 ... [详细]
  • 题目描述墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令ÿ ... [详细]
  • 题目描述:给定 n 把雨伞和 m 个人,t 分钟后开始下雨。求在每个人只能使用一把雨伞的情况下,最多有多少人可以拿到雨伞。 ... [详细]
  • 本教程旨在指导开发者如何在Android应用中通过ViewPager组件实现图片轮播功能,适用于初学者和有一定经验的开发者,帮助提升应用的视觉吸引力。 ... [详细]
  • 深入理解Java反射机制
    本文将详细介绍Java反射的基础知识,包括如何获取Class对象、反射的基本过程、构造器、字段和方法的反射操作,以及内省机制的应用。同时,通过实例代码加深对反射的理解,并探讨其在实际开发中的应用。 ... [详细]
  • 基于OpenCV的小型图像检索系统开发指南
    本文详细介绍了如何利用OpenCV构建一个高效的小型图像检索系统,涵盖从图像特征提取、视觉词汇表构建到图像数据库创建及在线检索的全过程。 ... [详细]
  • HDU1085 捕获本·拉登!
    问题描述众所周知,本·拉登是一位臭名昭著的恐怖分子,他已失踪多年。但最近有报道称,他藏匿在中国杭州!虽然他躲在杭州的一个洞穴中不敢外出,但近年来他因无聊而沉迷于数学问题,并声称如果有人能解出他的题目,他就自首。 ... [详细]
  • 本文详细解析了Java中流的概念,特别是OutputStream和InputStream的区别,并通过实际案例介绍了如何实现Java对象的序列化。文章不仅解释了流的基本概念,还探讨了序列化的重要性和具体实现步骤。 ... [详细]
  • GCC(GNU Compiler Collection)是GNU项目下的一款功能全面且高效的多平台编译工具,广泛应用于Linux操作系统中。本文将详细介绍GCC的特点及其基本使用方法。 ... [详细]
  • 1.打印日历打印日历判断是否是闰年#include<stdio.h>inta[]{0,31,28,31,30,31,30,31,31 ... [详细]
  • 今天老师上课讲解的很好,特意记录下来便于以后复习。多态的简单理解*1.什么是多态性?*(1)同一个动作与不同的对象产生不同的行为*(2)多态指的 ... [详细]
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社区 版权所有