排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比 ...
冒泡排序,不管序列是怎样,都是要比较n n 次的,最好 最坏 平均时间复杂度都为O n ,需要一个临时变量用来交换数组内数据位置,所以空间复杂度为O 。 优化:使用一个标志位来判断是否有序,若果有序,那么循环一次就直接退出,时间复杂度为O n 。 选择排序是冒泡排序的改进,同样选择排序无论序列是怎样的都是要比较n n 次的,最好 最坏 平均时间复杂度也都为O n ,需要一个临时变量用来交换数组内 ...
2019-08-09 21:42 0 759 推荐指数:
排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比 ...
本文主要描述3个时间复杂度为n2的排序算法:冒泡排序、选择排序、插入排序。 1.冒泡排序:由数组头部开始,一次比较两个元素,如果他们的顺序错误就把他们交换过来。每次交换完成后,当前数组最大值就会被放在最后。 传入参数:a为待排序数组,n为数组长度。 第一个for循环 ...
本文讲述时间复杂度为n*logn的排序算法:归并排序、快速排序、堆排序以及希尔排序的原理、Java实现以及变形应用。 一、归并排序 原理:把两个有序数列合并为一个有序数列。需递归实现。 Java实现: 二、快速排序 原理:每一次将一个数放在一个左边 ...
一、动图演示 二、思路分析 1. 第一个跟后面的所有数相比,如果小于(或小于)第一个数的时候,暂存较小数的下标,第一趟结束后,将第一个数,与暂存的那个最小数进行交换,第一个数就是 ...
一、动图演示 二、思路分析 先来了解下堆的相关概念:堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩 ...
一、动图演示 二、思路分析 例如从小到大排序: 1. 从第二位开始遍历, 2. 当前数(第一趟是第二位数)与前面的数依次比较,如果前面的数大于当前数,则将这个数放在当前数的位置上,当前数的下标-1, 3. 重复以上步骤,直到当前数不大于前面的某一个数为止 ...
一、动图演示 二、思路分析 归并排序就是递归得将原始数组递归对半分隔,直到不能再分(只剩下一个元素)后,开始从最小的数组向上归并排序 1. 向上归并排序的时候,需要一个暂存数组用来排序, 2. 将待合并的两个数组,从第一位开始比较,小的放到暂存数组,指针向后移, 3. ...
一、动图演 二、思路分析 基数排序第i趟将待排数组里的每个数的i位数放到tempj(j=1-10)队列中,然后再从这十个队列中取出数据,重新放到原数组里,直到i大于待排数的最大位数。 1.数组里的数最大位数是n位,就需要排n趟,例如数组里最大的数是3位数,则需要排3趟。 2. ...