算法效率的分析--【以选择排序与冒泡排序为基础】

在前面我们实现了选择排序与冒泡排序的具体实现,现在我们从数学的角度分析下算法的效率问题:

首先我们把两种排序算法的概念重温一遍:

选择排序:在每一轮中,找出最小的元素放在他最终的位置。挺起来有些别扭,我们举个实例:

eg:        8, 5,1, 20, 6, 3

1ed······  1, 5,8, 20, 6, 3

2ed······  1, 3, 8,20, 6,5

3ed······  1, 3,5, 20, 6, 8

4ed······  1, 3,  5,
6,  20,8

5ed······  1, 3,  5, 6, 
8,20

这样一看应该就比较清楚了,那么在每次循环中比较是主要的操作,所以我们就把比较作为该算法分析的一个点,接下来我们从数学的角度分析:

在算法分析中有几个重要的公式:

在选择排序中:

for(i=0;i--->n-1)
{
       min=i;
       for(j=i+1;j---->n){
       if  array[j]<array[min]
            min=j;
    }
     swap(array[min],array[i]);
}

由上面我们可以得出数学公式:

这样我们就可以粗略的计算该算法的时间复杂度。通过这样的结果我们就可以衡量不同的算法在特定的条件下,哪个效率会更高。其实下面的冒泡排序算法的时间复杂度跟上面的选择排序是一种类型的,所以下面我只大概的说明下:

冒泡排序:

关于冒泡排序,这个名字其实比较有意思,记得小时候经常向小水渠丢石头,每次我们丢入一块石头的时候,你会发现都会有一个水泡冒出来,这样联想起来,这个算法就更加容易理解了;通俗的话来讲就是,在每一轮的比较中,都会有一个最大的元素沉下去。下面我们一起看看伪代码:

for(i=0;i<array.length-1){
	for(j=0;j<array.length-i-1){
		if(array[j]>array[j+1])
			swap(a[j][j+1])
	}
}

经过同样的步骤我们可以得到相同的结果就是n^2型,而这两种算法都属于蛮力算法,相对比较简单,有难度的等小弟再修炼一段时间与大家分享,有问题的欢迎一起学习讨论。

博主励志:

你无法改变的事情,就请默默的接受吧,否则伤心,伤脑,伤身...

时间: 2024-08-03 11:27:53

算法效率的分析--【以选择排序与冒泡排序为基础】的相关文章

算法学习之排序算法(三)(选择排序法)

1.引言 选择排序工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法.选择排序是和冒泡排序差不多的一种排序.和冒泡排序交换相连数据不一样的是,选择排序只有在确定了最小的数据之后,才会发生交换.怎么交换呢?我们可以以下面一组数据作为测试: 2, 1, 5, 4, 9 第一次排序:1, 2, 5, 4, 9 第二次排序: 1, 2, 5, 4, 9 第三次排序: 1, 2, 4, 5, 9 第四次排序:

七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)

 写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列.因此排序掌握各种排序算法非常重要.对下面介绍的各个排序,我们假定所有排序的关键字都是整数.对传入函数的参数默认是已经检查好了的.只是简单的描述各个算法并给出了具体实现代码,并未做其他深究探讨. 基础知识: 由于待排序的记录数量不同,使得排序过程中设计的存储器不同,可将排序方法分为两大类:一类是内部排序,指的是待排序记录存放在计算机随机存储器中进行的排序过程.另一类是外部排序,

算法——蛮力法之选择排序和冒泡排序c++实现

这次实现的是蛮力法中的两个例子,选择排序法和冒泡排序法,使用的编译环境是vs2013,下面对这两个算法做一个简单介绍,然后是两个算法的c++实现代码. 选择排序法比较的范围是整个列表,每次扫描结束找出最小的一个元素一次放在前面的位置:而冒泡排序法每次是将相邻两个元素进行比较,将较大的元素放在后面,这样一次扫描结束后就将当前最大的那个元素放在了列表的后面. 两个排序方法的算法如下: 选择排序法 SelectionSort(A[0....n-1]) //输入:一个可排序数组A[0....n-1],

图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序

图形化排序算法比较:快速排序.插入排序.选择排序.冒泡排序

C语言排序算法之简单交换法排序,直接选择排序,冒泡排序

C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 1 /*简单交换法排序 2 根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置 3 交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动 4 不稳定 5 */ 6 #include<windows.h> 7 #include<stdio.h> 8 void main(){ 9 int i,j,arr[10

选择排序与冒泡排序

这是两种非常相似的算法,都是两个嵌套循环.之前看网上很多人将选择排序当冒泡排序用,我怕以后混了,记录一下. 选择排序 /** * 选择排序 * @Title: getSelectSort * @Description: TODO(这里用一句话描述这个方法的作用) * @param @param arr * @param @return 设定文件 * @return int[] 返回类型 * @throws */ public static int[] getSelectSort(int[] ar

java 选择排序与冒泡排序

选择排序与冒泡排序的特点与区别 ++++++++++++++++++++++++++++++++++++++++++++++ 选择排序 这一种简单的排序方法,它的基本思想是:R[n]第一次从R[0]~R[n-1]中选取最小值,与R[0]交换;第二次从R[1]~R[n-1]中选取最小值,与R[1]交换;...., 第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换;.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换;总共通过n-1次,得到一个按排序码

【算法设计与分析基础】5、冒泡排序与选择排序

package cn.xf.algorithm.ch03; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * 数据排序 * * @author xiaof * */ public class Sort { /** * 对给定的数组进行排序 选择排序法 每次选择在当前序列之后的最小值,和当前序列数据进行对换 * * @param inputData * @return */ publi

经典排序算法学习笔记五——直接选择排序

一.直接选择排序 数据结构 数组 最差时间复杂度 O(n^2) 最优时间复杂度 O(n^2) 平均时间复杂度 O(n^2) 最差空间复杂度 О(n) total, O(1) auxiliary 1.算法思想: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置. 然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾. 以此类推,直到所有元素均排序完毕. 2.伪代码: repeat (numOfElements - 1) times set the first uns