标签:算法
什么是排序?为什么要使用排序?其实我们生活中处处都用到了排序,拿字典来说,现在,我们要在字典中查找某个字(已经知道这个字的读音),首先,我们需要根据这个字的读音,找到它所所在目录中的位置,然后根据这个字的所在页数准确的定位到这个字的位置。
在查找字的过程中,我们注意到了这样的字眼,根据读音找到。。。位置,根据页数定位这个字的位置,我们在无意识的情况下,使用到了排序和查找,字典的编写者对整部字典进行了排序,我们的工作就是根据字典的排序方法查找某个记录。下面详细的介绍排序的相关内容。
排序是一个处理数据的过程,它总是和查找共同出现,因为排序的目的就是方便查找数据,排序的好坏决定了查找的效率。
排序的方法有很多种,这里我选取了两个较为简单且有代表性的两种排序方法进行比较。冒泡排序和直接选择排序。下面我将从排序的方法、时间复杂度、稳定性和特点等几方面来介绍。
基本过程:
冒泡排序的过程就是在一个集合中,依次将每两个数据进行比较,然后把较大的数据放到后边,这样,每个过程结束后,最后一个数据总是最大的。冒泡排序的过程图示:
直接选择排序的过程就是,把一个集合中的最小的数据放到一个已经排好顺序的序列中,它和冒泡排序排列次序刚好相反,是从第一个数据开始排列的。直接选择排序图示:
时间复杂度:
可以看得出来,冒泡排序使用到了两层循环,它的时间复杂度是O(n^2);直接选择排序也是用到了两层循环,它的时间复杂度也是O(n^2)。
算法稳定性:
稳定性就是一个数据集合中,假设有两个数据相等,排序结束后,如果两个数据的前后位置发生变化,则这个排序方法是不稳定的。冒泡排序过程总,只有连续的两个数据会交换数据,也就是说,两个相同的数据是不会发生位置交换的,所以冒泡排序是稳定的排序方法。直接选择排序过程中,任何位置的两个数据都有可以交换位置,所以,直接选择排序是不稳定的排序方法。
算法 |
平均时间复杂度 |
最坏时间复杂度 |
空间复杂度 |
稳定性 |
冒泡排序 |
O(n^2) |
O(n^2) |
O(1) |
稳定 |
直接选择排序 |
O(n^2) |
O(n^2) |
O(1) |
不稳定 |
在所有的算法中,没有哪一种是最优的。就时间复杂度而言冒泡排序和直接选择排序,时间代价都是比较大O(n^2);就带排序数据而言,如果初始序列已经基本有序,则使用冒泡排序法更好,它的时间复杂度接近O(n);在实际情况中,我们应该根据不同的情况选择不同的算法,如果有必要,可以同时将多种算法结合起来使用。
标签:算法
原文地址:http://blog.csdn.net/u010942465/article/details/39963699