什么是排序
排序的概念:
排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
内部排序:数据元素全部放在内存中的排序
外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。
在生活中排序很常见
例如:
还有价格排序好评排序等等无处不在的排序这里就为大家盘一盘排序。
常见排序算法
插入排序(希尔排序)
选择排序(堆排序)(选择排序)
交换排序(冒泡排序)(快排)
归并排序
排序算法复杂度及稳定性分析
复杂度剖析:
冒泡排序:
因为是将每一个数字都比较并且每一个数字都被比较其算法复杂度为O(n2)
选择排序:
算出最大最小然后进行比较也是每一个数据都得过都得比较。O(n2)
插入排序:
也是每一个数据进行比较在进行挪动也是O(n2)
希尔排序:
当希尔排序运用了三数取中的方法那么其复杂度将变为O(n1.3)~O(n2)因为取中后不可能出现最差情况。
堆排序和归并排序:
堆排序和归并排序都用的是树的思想所以在复杂度上和树很接近都为O(nlogn)
快排:
快排也是进行分治排序对每一个都比较所以是O(n2)
稳定性剖析:
稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次
序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排
序算法是稳定的;否则称为不稳定的。
通俗的来讲就是当排序时,相同数据的位置与排序好后数据的相对位置是否有所改变。
冒泡排序:
稳定,只要序列内相等的数据都会进行比较并且swap所以相对位置不改变。
选择排序:
不稳定,举例:5(1),5(2),1当1为最小值要和5交换第一次就变成1,5(2),5(1),这样就可以发现相对位置进行了变化。
希尔排序:
不稳定,对每gap组的值进行比较肯定会改变其相对顺序。
快排:
不稳定。快排是最后将最后位置和Key位置进行交换肯定会改变。
堆排序:
不稳定
归并排序:
归并排序是一直分成小组然后比较每一次都会分最终1V1比较保留前一个就不会改变。