今天面试被问了关于排序算法的问题,突然发现大一学的数据结构都忘得差不多了,大致找了一下基本的排序算法,面试的时候可能会被问到,熟悉的排序算法有哪些?
翻开数据结构的书,复(yu)习了一下这个算法,刚开始看还真有点不是很清晰,最后自己给自己写了道例题:
大致说下排序原理:
1.选择第一个数作为关键码,取出关键码换成空位,首位置和尾位置分别是low和high的位置;
2.从high位置往前找到比关键码小的数,将这个数与空位(方框)互换位置,同时high移动到此位置;
3.从low位置往前找到比关键码大的数,将这个数与空位(方框)互换位置,同时low移动到此位置;
4.重复2.3步骤,直到low和high重合;
5.这样就以关键码为界限,将data分成比关键码大的和比关键码小的两组数;
6.对两组数分别重复1.2.3.4步骤,直到所有数有序排列。
快速排序的效率分析
快速排列的最差情况是每次选定的支点记录不能将待排序列很好的分割成两个独立的子序列,而是一个子序列中无记录,另一个中有n-1个记录。如果对一个原来已排好序的序列做快速排序,就会出现这种情况,而且发生在每一次的分割中,实际上就变成了冒泡排序,时间复杂度变得很差,为O(n²);
整个算法的时间复杂度是O(nlog₂n);它是目前基于“记录比较”操作的内部排序方法最快的,因此得名。当n很大时,小鹿明显高于其它算法。在基本排好的情况下避免用这种算法。