博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
冒泡排序算法的C++,Java和Python实现和冒泡排序算法三种语言效率的比较
阅读量:5092 次
发布时间:2019-06-13

本文共 2946 字,大约阅读时间需要 9 分钟。

冒泡排序原理:

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

他讲的是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 namespace std;void print(int a[],int n){ for (int k = 0; k < n; k++) { cout << a[k] << endl; }}int main(){ clock_t startTime, endTime; startTime = clock(); int a[8] = { 5,9,7,6,1,8,13,4 }; //获取数组的长度 int n = sizeof(a) / sizeof(a[0]); //第一个元素只需要和n-1个元素进行比较 //第二个元素只需要和n-2个元素进行比较 //以此类推 for (int i = 0; i < n - 1; i++) { //第一个元素只需要和n-1个元素进行比较 //第二个元素只需要和n-2个元素进行比较 //以此类推 for (int j = 0; j < n - i - 1; j++) { //只要前面的元素大于后面的元素,立即交换 if (a[j] > a[j + 1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } cout << "第" << i + 1 << "步骤" << endl; print(a, n); } cout << "最终结果" << endl; print(a, n); endTime = clock(); cout << "Totle Time : " << (double)(endTime - startTime)*1000 / CLOCKS_PER_SEC << "ms" << endl; system("pause"); return 0;}

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
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-8import timedef 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 numsnums = [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

转载于:https://www.cnblogs.com/Java-Starter/p/9198912.html

你可能感兴趣的文章
分类树操作
查看>>
如何下载 Chrome 应用商店的 .crx 文件
查看>>
利用GDI+ for.NET 给图片加水印标记
查看>>
【转载】 扫描二维码自动识别手机APP下载地址
查看>>
js 对url进行编码和解码的三种方式
查看>>
windows phone 扫描二维码
查看>>
ubuntu(linux)占领小米平板2(mipad2)
查看>>
【java】自定义异常类
查看>>
【Oracle】Oracle基本数据类型总结
查看>>
第四周学习进度条3
查看>>
Rsync的配置与使用
查看>>
程序员应注意——米勒法则
查看>>
深刻理解Python中的元类(metaclass)
查看>>
[转]java String的经典问题(new String(), String)
查看>>
.net Core使用RabbitMQ
查看>>
博客园博客转至个人网站博客声明
查看>>
linux安装Linux下软件的安装与卸载方法
查看>>
nginx模块
查看>>
牛客网 牛客小白月赛2 H.武-最短路(Dijkstra)
查看>>
Memo组件
查看>>