排序时间复杂度
时间复杂度:
1、插入、选择、冒泡排序的时间复杂度为O(n2)
2、桶排序的时间复杂度为O(n+m)
3、其他排序(快速排序、归并排序,希尔排序, 堆排序)的时间复杂度为O(nlogn)
(1)插入和冒泡排序在序列整体有序的情况下能达 到比较快的速度。
(2)在数据整体有序或者大部分相同的情况下,快 速排序的时间复杂度可能会特别慢,最坏可以到 O(n2)。
排序算稳定性
排序的稳定性是指原序列中相同元素的相对位置与排好序的新序列中相同元素的相对位置是否相同, 若相同,则为稳定排序,否则为不稳定排序。
插入排序、冒泡排序、归并排序是稳定排序。
选择排序、希尔排序、快速排序、桶排序、堆排序是不稳定排序。
这里不难发现,如果是按照顺序插入或相邻位置进行的调换,那么大概率这个排序是稳定的,反之,如果是大范围的跨越那么就很有可能是不稳定排序
例题训练(七)
-
【NOIP2002】一个向量第一个元素的存储地址是100,每个元素的长度是2,则第 5个元素的地址是( )。 A.110 B.108 C.100 D.109
答案:B
题解:数据元素的存储位置均取决于第1个数据元素的存储位置,即 LOC(ai)=LOC(a1)+(i-1)×C ,所以第5个元素的地址为100+2*(5-1)=108。
-
【NOIP2000普及组】在待排序的数据表已经为有序时,下列排序算法中花费 时间反而多的是( )
A.堆排序 B.希尔排序 C.冒泡排序 D.快速排序
答案:D
题解:最坏情况下,是整个序列都已经有序,此时,快速排序退化为冒泡 排序,要比较n*(n-1)/2次才能完成。
-
【NOIP2002】在所有排序方法中,关键字比较的次数与记录的初始排列次序 无关的是( )。
A.希尔排序 B.起泡排序 C.插入排序 D.选择排序
答案:D
题解:选择排序特点是排序总是从第一位开始,与起始位无关。所有趟 数下来关键字总是总共比较n(n-1)/2次,每一趟关键字比较次数也是固定 的。
-
【NOIP2006普及组】在下列各种排序算法中,不是以“比较”作为主要操作的 算法是( )。
A. 选择排序 B. 冒泡排序 C. 插入排序 D. 基数排序
答案:D
题解:基数排序按个、十、百······轮流排序,非比较。
-
【NOIP2006】将5个数的序列排序,不论原先的顺序如何,最少都可以通过() 次比较,完成从小到大的排序。
A. 6 B. 7 C. 8 D. 9
答案:B
题解:简单的说,5个数的全排列,共有5*4*3*2*1=120种,而每次比较能 得到或大或小两种情况,n次比较可得到2^n种情况,所以要想区分出这120种 情况,至少要n=7,即有2^7=128>=120。也就是说至少要7次比较。
-
【NOIP2001】在顺序表(2,5,7,10,14,15,18,23,35,41,52)中, 用二分法查找12,所需的关键码比较的次数为( )。
A.2 B.3 C.4 D. 5
答案:C
题解:按二分法,该数需依次和15,7,10,14比较,共4次。