请问稳定排序哪几种?

请问稳定排序哪几种?,第1张

请问稳定排序哪几种?

参考回答:

基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序

参考回答:

1、快排算法

根据哨兵元素,用两个指针指向待排序数组的首尾,首指针从前往后移动找到比哨兵元素大的,尾指针从后往前移动找到比哨兵元素小的,交换两个元素,直到两个指针相遇,这是一趟排序,经常这趟排序后,比哨兵元素大的在右边,小的在左边。经过多趟排序后,整个数组有序。

稳定性:不稳定

平均时间复杂度:O(nlogn)

2、稳定排序

假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。

快排算法是不稳定的排序算法。例如:

待排序数组:int a[] ={1, 2, 2, 3, 4, 5, 6};

若选择a[2](即数组中的第二个2)为枢轴,而把大于等于比较子的数均放置在大数数组中,则a[1](即数组中的第一个2)会到pivot的右边, 那么数组中的两个2非原序。

若选择a[1]为比较子,而把小于等于比较子的数均放置在小数数组中,则数组中的两个2顺序也非原序。

3、快排最差情况推倒

在快速排序的早期版本中呢,最左面或者是最右面的那个元素被选为枢轴,那最坏的情况就会在下面的情况下发生啦:

1)数组已经是正序排过序的。 (每次最右边的那个元素被选为枢轴)

2)数组已经是倒序排过序的。 (每次最左边的那个元素被选为枢轴)

3)所有的元素都相同(1、2的特殊情况)

因为这些案例在用例中十分常见,所以这个问题可以通过要么选择一个随机的枢轴,或者选择一个分区中间的下标作为枢轴,或者(特别是对于相比更长的分区)选择分区的第一个、中间、最后一个元素的中值作为枢轴。有了这些修改,那快排的最差的情况就不那么容易出现了,但是如果输入的数组最大(或者最小元素)被选为枢轴,那最坏的情况就又来了。

快速排序,在最坏情况退化为冒泡排序,需要比较O(n2)次(n(n - 1)/2次)。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4888416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存