数据结构排序问题,来思路即可

如果有一个数据序列有1000个元素,其中只有少数几个元素不在自己的正确位置上,但离自己的正确位置不远,从比较次数和记录移动次数考虑选用哪种排序算法(直接插入排序,希尔排序,堆排序,直接选择排序,快速排序,冒泡排序,归并排序)
可采用冒泡排序方法:
分析如下:
根据你的要求,特点,列表中大多数元素是正确的。只有少数不正确。
那就要求采用排序时比较次数和交换次数较少的算法(对于此情况)

冒泡排序:相邻两两比较,在每一趟禅迅漏过程中,把最大或最小值冒泡到上面,每次都会得到一个更有序的列表。
如果只有几个元素不在自己的位置(如有5个),则最大进行5+1趟冒泡即可,而且不正确的元素
离正确的位置很近,所以交换的次数就少。

插入排序:把队列中的元素依次插入到有序的列表中。如果不正确的元贺烂素在后面,则前面的比较次数则太多。
希尔排序:也是分组进行的插入排序方法。
堆排序:是一种适用于大数据的外排序
直接选择排序:从无序的队列中依次选择中最小或最大者放到有序表的后面。如果不正确的元素在中间,则比较和查找的次数会比较多。
快速排序:不稳定的排序。而且对于有序的表来说,不是最理想的。
归并排序:是稳定的排序,但对于本题,多余的比较量很大,在已经基本有序的列表中,就无必要昌誉了。
具体情况具体分析,哪一种快,就用快一种~

不过建议使用:堆排序
如果是基本排序,直接插入最好
堆排序和快排首先排除掉,因为堆排序重建堆,很耗时间,快排也是枢纽元几乎就属于最差选择模式
冒泡和直接选择是始终如一的慢
归拆拿并也快,但是要临时数组,空间代价液御衫比较大,
希尔排序的时间复杂度太闹腔难确定了,一般直接排除
快速