iOS:常用排序算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS:常用排序算法相关的知识,希望对你有一定的参考价值。
参考技术A 冒泡排序是相邻数据进行两两比较,假设升序排序,则一趟排序下来,就会有一个最大数产生在数组最末端。因为有 n 个数据需要进行比较,而每一趟排序需要遍历n个数据,所以时间复杂度为O(n^2)快速排序是定下一个基准数(一般默认定义最左侧数据为基准数,可以理解为参照数),每一趟排序都需要从左(角标 i)右(角标 j)两侧开始像中间进行排序,因为基准数定义在左侧,一般先从右侧开始向左侧移动,j--;遇到小于基准数的暂停,左侧开始向右移动,i++;遇到大于基准数的暂停;然后交换i 和 j 所对应的数据。当i和j相遇的时候,则将相遇值与基准数进行交换,一趟排序结束。时间复杂度是O(log2 n)
常用排序算法之插入排序
插入排序和上篇讲的冒泡、选择排序一样都是平均时间复杂度为O(n^2)的排序算法(常用排序算法之冒泡排序、选择排序),这也限制了他们的一些使用,在大数据集排序时很少用到,这三种算法当然也是最简单易懂的算法,普通人都能想出来,所以这三个算法算是排序算法里最普通的了:)后面会介绍时间复杂度更优的算法,如快排、归并及堆排序,他们的时间复杂度为O(nlog(n))。
插入、冒泡与选择排序现在已经从《算法导论》里面移除了,难道作者觉得太简单,没有讲解的必要了吗(捂脸哭)。
插入排序的思想的确相当之简单,就像我们给扑克牌排序一样,我们摸到新牌时,假设从小到大排列,会依次往前比较,然后插入到一个 比前面牌大,比后面牌小 的位置上,这个位置就是这张新来的牌应该处于的位置。
插入排序类似于扑克牌的排序,图片来自《大话数据结构》
由上动图,可以看出,这个算法除了比较操作,很大一部分时间消耗在了数组的移动上,假设我即将插入的是最小的元素(相对于已经排序好的部分,即图中所示黄色部分),那么不得不将此元素现在位置前的元素都向后挪一个位置,这是很浪费CPU时间操作,这也是此算法的瓶颈所在,即可能存在大量的数组元素搬迁动作。
下篇写堆排序,以及性能更优于堆排序的快速排序。
--END
以上是关于iOS:常用排序算法的主要内容,如果未能解决你的问题,请参考以下文章