算法之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)


大家加油

相关文章
|
7月前
|
存储 自然语言处理 算法
【算法】----BF算法&KMP算法
【算法】----BF算法&KMP算法
61 0
|
算法
双指针法将时间复杂度从 O(n^2) 优化到 O(n)
 双指针法(Two Pointers)是一种常见的算法技巧,常用于数组和链表等数据结构中。
|
算法 安全 Java
BF算法和KMP算法
BF算法和KMP算法
162 0
BF算法和KMP算法
|
算法
字符串匹配算法(BF&&KMP)
字符串匹配算法(BF&&KMP)
127 0
|
存储 算法
【字符串匹配算法:BF & KMP】
【字符串匹配算法:BF & KMP】
【字符串匹配算法:BF & KMP】
算法的时间复杂度比较,计算多项式的直接法和秦九韶法
算法的时间复杂度比较,计算多项式的直接法和秦九韶法
算法的时间复杂度比较,计算多项式的直接法和秦九韶法
编写程序,用牛顿法求方程x^3-x-1在1.5附近的根
编写程序,用牛顿法求方程x^3-x-1在1.5附近的根
216 0
编写程序,用牛顿法求方程x^3-x-1在1.5附近的根
|
算法 C++
|
算法 程序员
最详BF算法和KMP算法
最详BF算法和KMP算法
最详BF算法和KMP算法
|
算法
a^b(快速幂)
题目: 求 a 的 b 次方对 p 取模的值。 输入格式: 三个整数 a,b,p ,在同一行用空格隔开。 输出格式: 输出一个整数,表示a^b mod p的值。
81 0