冒泡排序算法的C++,Java和Python实现和冒泡排序算法三种语言效率的比较
冒泡排序原理:
这一篇百度经验讲得很好,我不多说了
https://jingyan.baidu.com/article/6525d4b13f920bac7d2e9484.html
他讲的是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 <iostream>
#include<time.h> using namespace std; void print(int a[],int n)
{
for (int k = ; k < n; k++)
{
cout << a[k] << endl;
}
} int main()
{ clock_t startTime, endTime;
startTime = clock(); int a[] = { ,,,,,,, }; //获取数组的长度
int n = sizeof(a) / sizeof(a[]);
//第一个元素只需要和n-1个元素进行比较
//第二个元素只需要和n-2个元素进行比较
//以此类推
for (int i = ; i < n - ; i++)
{
//第一个元素只需要和n-1个元素进行比较
//第二个元素只需要和n-2个元素进行比较
//以此类推
for (int j = ; j < n - i - ; j++)
{
//只要前面的元素大于后面的元素,立即交换
if (a[j] > a[j + ])
{
int temp = a[j];
a[j] = a[j + ];
a[j + ] = temp;
} } cout << "第" << i + << "步骤" << endl;
print(a, n); }
cout << "最终结果" << endl;
print(a, n); endTime = clock();
cout << "Totle Time : " << (double)(endTime - startTime)* / CLOCKS_PER_SEC << "ms" << endl; system("pause");
return ;
}
Java实现
package com.xgt.util; import java.lang.reflect.Method; /**
* @author cjy
* @Date 2018/6/19 15:25.
*/
public class BubbleSort {
static void print(int[] arr,int n)
{
for(int k=0;k<arr.length;k++){
System.out.print(arr[k]+",");
}
System.out.println();
} private static final int a[] = {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 = a.length;
for(int i=0;i<n-1;i++){
for(int j=0;j<n-1-i;j++){
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
System.out.println("第"+(i+1)+"个步骤");
print(a,n);
}
System.out.println("最终结果");
print(a,n);
} /**
* 计算方法执行时间
* @param method 所有方法都是Method类的对象
*/
private static void methodExecutionTime (Method method) {
long begin = System.nanoTime();
try {
method.invoke(new BubbleSort(), a);
} catch (Exception e) {
e.printStackTrace();
} long end = System.nanoTime() - begin;
System.out.println(method.getName() + "方法耗时:" + end/1000 + "纳秒");
}
}
Python实现
#!/usr/bin/env python
# coding:utf-8
import time def bubbleSort(nums):
for i in range(len(nums)-1): # 这个循环负责设置冒泡排序进行的次数
for j in range(len(nums)-i-1): # j为列表下标
if nums[j] > nums[j+1]:
t = nums[j];
nums[j] = nums[j+1];
nums[j+1] = t;
print"第",i+1,"步骤"
print(nums)
return nums nums = [5,9,7,6,1,8,13,4]; start = time.time()
bubbleSort(nums)
end = time.time()
print (end-start)*1000000,"微秒"
| 语言 | Java | Python | C++ |
| 平均时间(ms) | 1322 | 999 | 24 |
Java运行时间控制台截图

Python运行时间截图

C++运行时间截图

效率排行:C++>Python>Java
冒泡排序算法的C++,Java和Python实现和冒泡排序算法三种语言效率的比较的更多相关文章
- java php c# 三种语言的AES加密互转
java php c# 三种语言的AES加密互转 最近做的项目中有一个领取优惠券的功能,项目是用php写得,不得不佩服,php自带的方法简洁而又方便好用.项目是为平台为其他公司发放优惠券,结果很囧的是 ...
- python列表和字符串的三种逆序遍历方式
python列表和字符串的三种逆序遍历方式 列表的逆序遍历 a = [1,3,6,8,9] print("通过下标逆序遍历1:") for i in a[::-1]: print( ...
- Java 数组元素逆序Reverse的三种方式
Java 数组元素逆序Reverse的三种方式 本文链接:https://blog.csdn.net/xHibiki/article/details/82930521 题目 代码实现 说明 int ...
- python实现XML解析的三种方法
python实现XML解析的三种方法 三种方法:一是xml.dom.*模块,它是W3C DOM API的实现,若需要处理DOM API则该模块很适合:二是xml.sax.*模块,它是SAX API的实 ...
- Python实现微信支付(三种方式)
Python实现微信支付(三种方式) 关注公众号"轻松学编程"了解更多. 如果需要python SDk源码,可以加我微信[1257309054] 在文末有二维码. 一.准备环境 1 ...
- Python+Selenium自动化-设置等待三种等待方法
Python+Selenium自动化-设置等待三种等待方法 如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候,就需要我们通过设置一个等待条件,等待页面元素加载完成,避免出现 ...
- Java三大框架之——Hibernate中的三种数据持久状态和缓存机制
Hibernate中的三种状态 瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过 ...
- 0036 Java学习笔记-多线程-创建线程的三种方式
创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...
- java.lang.UnsatisfiedLinkError: Native method not found 三种可能解决方案
so文件编译生成后,运行时,有时候会遇到java.lang.UnsatisfiedLinkError: Native method not found问题,有可能是以下三种因素: 一.Jni方法头部大 ...
随机推荐
- python基础学习21----进程
python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程. 进程与线程的使用有很多相似之处,有关线程方面的知识请参考https://w ...
- Javaweb学习(二):Http通信协议
当我们开始jsp/servlet编程之旅之前,我们还需要知道一些关于网络通讯方面的一些知识.这样能更加有助于我们的理解,希望大家能看懂我的描述,而不至于在学习的路上一知半解.(手动比❤) 认识Ht ...
- maven的下载与安装
下载路径:http://maven.apache.org/download.cgi 选择打红线的进行下载,我用的版本是3.3.9, 下载后解压该文件,解压后的文件内容如下: 解压完成后配置maven的 ...
- js 毫秒转换为标准时间
function dateForm(time){ var unixTimestamp = new Date( 1477386005*1000 ); commonTime = unixTimestamp ...
- sublime text3 当运行报错error时,取消显示路径path的方法
sublime text3 每当运行报错error时,都会出现一长串的path路径,如何不显示呢? 可以通过注释掉Packages/Default/exec.py的四个特定行来更改. 首先,您需要从P ...
- luogu P1891 疯狂LCM
嘟嘟嘟 这题跟上一道题有点像,但是我还是没推出来--菜啊 \[\begin{align*} ans &= \sum_{i = 1} ^ {n} \frac{i * n}{gcd(i, n)} ...
- 【转】PHP中file_put_contents追加和换行
在PHP的一些应用中需要写日志或者记录一些信息,这样的话. 可以使用fopen(),fwrite()以及 fclose()这些进行操作. 也可以简单的使用file_get_contents()和fil ...
- MetaMask/json-rpc-engine
https://github.com/MetaMask/json-rpc-engine RpcEngine——MetaMask/json-rpc-engine https://github.com/M ...
- OpenCV——滤波
常见滤波函数: 其中前3中为线性滤波,后2中为非线性滤波 参考资料:https://mp.weixin.qq.com/s/3maNqlTSkl6FQs_xqrs8Fg
- qmlscene: could not find a Qt installation of ''
qt └── helloqt.qml 在qt目录下运行helloqt.qml文件时出现这个提示: $ qmlscene helloqt.qml qmlscene: could not find a Q ...