美文网首页嵌牛IT观察
N^2排序算法总结

N^2排序算法总结

作者: 错错对 | 来源:发表于2017-12-16 22:28 被阅读0次

姓名:王怀帅  学号:16040410035

转载自:http://www.jianshu.com/p/c58eadf8db34=有修改

【嵌牛导读】:使用N^2复杂度的优缺点以及分类

【嵌牛鼻子】:N^2排序算法

【嵌牛提问】:如何来优化N^2算法?

【嵌牛正文】:

选择排序

算法的图解

SetectSort.gif

算法的基本实现

根据上面的gif图可以得到,实现选择排序需要两个步骤

找到第i个元素后的最小的数字

for (int i = 0; i < myArray.length; i++) {

minIndex=i; //假设最小值为i

//寻找最小值

for (int j = i; j < myArray.length; j++) {

if (myArray[minIndex]>myArray[j]) minIndex=j;

}

交换最小位置的元素和第i个位置的元素

Utils.swap(myArray,i,minIndex);

交换方式的一个小结

插入排序

动态演示

InstallSort.gif

算法的基本实现

判断当前索引的元素与其前面的数据进行比较

for (int i = 1; i < myArray.length; i++) {

for (int j = i; j >0; j--) {

}

}

如果小于前面的索引,则进行位置交换

if (myArray[j]

Utils.swap(myArray,j,j-1);

算法的优化

优化演示

优化

起因:因为交换数据每次都需要,创建三个变量,效率十分的低,我们需要用一种方式,使得不需要交换数据也能实现功能

方法:将当前索引的位置的数据进行copy,用这个拷贝值与前面的数据进行比较,如果小于前面的数据,则前面的数据向后移动,直到,copy值大于前面的某一个值,然后替换到该位置

实现

for (int i = 1; i < myArray.length; i++) {

int e=myArray[i];    //记录当前索引的值

int j;              //方面与最后位置索引进行数据赋值

for (j = i; j >0 && e < myArray[j-1]; j--)

myArray[j]=myArray[j-1];    //比当前索引值大的数据整体位置向后移动

myArray[j]=e;          //将拷贝值放入正确位置

}

算法的使用场景

如果当前数据本身是相对有序的,那么插入算法相比其他算法效率更高。

如果数据本身是无序的,那么,选择O(n*logn)的方法

冒泡排序

算法的动画演示

BubbleSort.gif

算法的基本实现

遍历数组

for (int i = 0; i < array.length; i++)

找出在i位置真正的数据,也就是i后的最小值,放入i的位置

for (int j = array.length-1 ; j > i; j--) { //注意这里一定要大于i否则会产生越界的问题

if (array[j]

Utils.swap(array,j,j-1);

}

三种算法的比较

选择排序插入排序冒泡排序

使用场景效率低少使用要处理的数据本生的有序性好,可以使用效率低谨慎使用

相关文章

  • python 八大算法

    排序算法总结 排序算法 平均时间复杂度 冒泡排序O(n2) 选择排序O(n2) 插入排序O(n2) 希尔排序O(n...

  • 排序算法总结

    排序算法总结 分类编程技术 排序算法平均时间复杂度 冒泡排序O(n2) 选择排序O(n2) 插入排序O(n2) 希...

  • 常见排序算法总结

    排序算法总结 冒泡排序 时间复杂度 O(n2) 【 O(n)~On(n2)】空间复杂度 O(1)稳定性 ...

  • LeetCode-排序算法

    LeetCode-排序算法 时间复杂度 排序算法平均时间复杂度冒泡排序O(n2)选择排序O(n2)插入排序O(n2...

  • 排序算法总结

    n^2的算法:冒泡排序,选择排序,插入排序n^1.3的算法:希尔排序nlogn的算法:归并排序、快速排序 泛型的使...

  • 算法总结

    算法总结 排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序; 输入:n个数:a1,a2,a3,....

  • 【数据结构】【C#】023-内部排序:👨‍🏫算法总结

    【C#】【数据结构】排序算法总结 动态可视化排序算法网站——SORTING 时间复杂度: (1)平方阶(O(n2)...

  • 算法与数据结构-排序(3)

    常见排序算法 算法平均时间复杂度原地排序稳定排序插入排序O(n^2) ,有序情况 -> O(n)TrueTrue快...

  • 第二章_排序_2019-03-13

    经典的排序算法 冒泡排序(O(n2)):排序区间按N、N - 1、N - 2、……、2的规律变化,有序区间按1、2...

  • 快速排序算法模板

    快速排序模板1 快速排序模板2 对快速排序算法的主要总结 时间复杂度:最好情况:O(nlogn)最坏情况:O(n2...

网友评论

    本文标题:N^2排序算法总结

    本文链接:https://www.haomeiwen.com/subject/fbraixtx.html