算法之n^2的三个算法总结

简介: 算法是真的应该好好研究研究,且让容我来水一水

如何分析一个“排序算法”?

排序算法的执行效率

最好最坏平均情况时间复杂度

时间复杂度的系数、常数、低阶

比较次数和交换次数

排序算法的内存消耗

排序算法的稳定性

冒泡排序

原理:冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。

代码实现:

publicvoidbubbleSort(int[] arr,intn){
if(n<=0 ){
return;
    }
for(inti=0; i<n; ++i){
booleanflag=false;
for(intj=0;j<n-i-1;++j){
if(arr[j+1] <arr[j]){
inttemp=arr[j];
arr[j] =arr[j+1];
arr[j+1] =arr[j];
flag=true;
            }
        }
if(!flag) break;
    }
}

稳定性分析:稳定

复杂度分析:

插入排序

原理:将一组数据进行分类,一类是已有序数据,另一类是未排序数据,每次循环将未进入到有序数据得数据中找到一个,并在有序数据中找到合适位置,并将数据进行放入有序集合内。整理扑克牌的思想。

对于近乎有序的操作,效率更高。

代码实现:最坏复杂度O(n^2)  最好复杂度O(n) 平均复杂度O(n^2)

publicstaticvoidinsertSort(Comparable[] arr){
intn=arr.length;
for (inti=1; i<n; i++){
//寻找元素arr[i]合适得插入位置// 优化方式Objectobj=arr[i];
intj ;
for (j=i; j>0&&arr[j-1].compareTo(obj) >0 ; j--) {
arr[j] =arr[j-1];
        }
arr[j] = (Comparable) obj;
    }
}

稳定性分析:稳定

复杂度分析:最坏复杂度O(n^2)  最好复杂度O(n) 平均复杂度O(n^2)


选择排序

原理:一个需要排序得数组元素有n个,每一次循环时判断目标元素与组内其他元素大小判断,小或者大,取出之后,记录数组内下表,并在一次循环后将满足条件得数据进行交换位置。完成n此循环后实现排序。首先找到第一名的位置,让第一名的位置与第一的数据进行交换,保持前面的数据有序,在后面的数据找到第二个位置的数据。

其实就是,保证前面数据的有序,在后面找到满足条件的一个值,放到前面的数据。

代码实现:

publicvoidselectionSort(int[] arr,intn){
if(n<=0){
return;
    }
for(inti=0; i<n; i++){
intminIndex=i;
for(intj=i+1,j<n; j++){
if(arr[j] <arr[minIndex]){
minIndex=j;
            }
        }
inttemp=arr[i];
arr[i] =arr[minIndex];
arr[minIndex] =temp;
    }
}

稳定性分析:该算法为不稳定算法,元素间顺序时会发生变化得再排序过程中

复杂度分析:最坏复杂度  最好复杂度 平均复杂度均为O(n^2)


大家加油

相关文章
|
Unix API 调度
POSIX线程基本操作
POSIX线程基本操作
526 0
|
机器学习/深度学习 算法 数据可视化
【机器学习】十大算法之一 “PCA”
PCA(Principal Component Analysis,主成分分析)是一种广泛使用的线性降维算法,在机器学习领域被广泛应用。通俗地说,它是一种通过将高维数据映射到低维数据,保留数据主要特征的方法。在PCA中,数据被投影到一个新的低维抽象空间中,使新的特征集能最大化地解释数据集的方差,我们可以选择保留最大方差的前k个特征值。通常,PCA被用于降维,但它也被用作一种特征提取算法。在本文中,我们介绍了PCA算法的基本原理,讨论了它的应用,以及在Python中如何实现。
1949 0
【机器学习】十大算法之一 “PCA”
|
SQL 缓存 分布式计算
54 Hive的Join操作
54 Hive的Join操作
471 0
|
设计模式 缓存 算法
Python设计模式:23种设计模式介绍
设计模式是软件开发中经典的解决问题的方法,包含23种设计模式,它们可以分为三类:创建型模式、结构型模式和行为型模式。
425 1
|
NoSQL 开发工具 数据库
开发与运维测试问题之应用启动报 Can not load this fake sdk class 的异常如何解决
开发与运维测试问题之应用启动报 Can not load this fake sdk class 的异常如何解决
350 0
|
编解码 算法 数据中心
遥感生态指数(RSEI)——四个指数的计算
遥感生态指数(RSEI)——四个指数的计算
遥感生态指数(RSEI)——四个指数的计算
|
传感器 数据采集 算法
LabVIEW中PID控制器系统的噪声与扰动抑制策略
LabVIEW中PID控制器系统的噪声与扰动抑制策略
540 21
|
JSON 前端开发 Java
Java对象与json字符串的转换
前后台传递通常会用到Json来转换,因此java对象与json字符串之间的转换使用变得很频繁。
3091 0

热门文章

最新文章

下一篇
开通oss服务