首页 > 试题广场 >

已知数据表A中每个元素距其最终位置不远,为节省时间,应该采用

[单选题]
已知数据表A中每个元素距其最终位置不远,为节省时间,应该采用的算法是
  • 直接选择排序
  • 堆排序
  • 快速排序
  • 直接插入排序
答案错了,选择不会受待排序程度的影响
发表于 2017-02-10 23:06:01 回复(1)
明显是插入排序啊,真服了这套题
发表于 2017-02-12 23:32:21 回复(0)
答案:D
快速排序的精髓:以一个数k为基准,将数据分割为两部分,其中一部分大于k另外一部分不大于k,从而找到k的位置;然后 按照此方法对两部分数据进行递归操作。因此该方法数据越乱越好。
发表于 2017-03-13 14:32:36 回复(0)
 //使用直接插入法排序  递增
    public static void insertSortByTow(int arr[]){
        int len=arr.length-1;//数组长度
        for(int i=0;i<len;i++){ //默认你选择第一个,后面的数据加入待排序序列
            for(int j=i+1;j>0;j--){//取出当前元素的后一个位置
                //从后向前扫描 比较
                if(arr[j]>arr[j-1])break;//递增排序
                int temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
        System.err.println("打印排序后的数组:"+Arrays.toString(arr));
    }
发表于 2019-08-16 15:02:23 回复(0)
1、选择排序,每次选好一个最小值,与当前i位互换,移动次数很少,排序程度不管是高是低,移动次数都不会有变化。
2、插入排序,将当前a[i]与前面的已排序元素挨个对比,需要大量交换和移动,所以该插入方法对排序程度的高/低很敏感。排序程度较高时,该方法速度会有较大提升。
3、快速排序的精髓:以一个数k为基准,将数据分割为两部分,其中一部分大于k另外一部分不大于k,从而找到k的位置;然后 按照此方法对两部分数据进行递归操作。因此该方法数据越乱越好。
发表于 2018-01-09 17:10:25 回复(0)
要注意到各排序方法的特点
1、选择排序,每次选好一个最小值,与当前i位互换,移动次数很少,排序程度不管是高是低,移动次数都不会有变化。
2、插入排序,将当前a[i]与前面的已排序元素挨个对比,需要大量交换和移动,所以该插入方法对排序程度的高/低很敏感。排序程度较高时,该方法速度会有较大提升。

所以本题选插入排序
发表于 2017-09-15 11:35:02 回复(0)
堆排序不可以吗?
发表于 2017-07-24 10:47:52 回复(1)
假设每个元素需要移动的距离不大于k,用堆排序的时间复杂度应该是O(nlogk)最小啊
发表于 2017-03-30 18:12:05 回复(0)
明显插排。当需要改变的元素离终点较近。插排时需要发生的改变就较小。则应采用插排。
发表于 2017-03-30 12:19:48 回复(0)
快排是找某元素的正确位置,而题目分明离最终位置不远,显然是快速排序呀!
发表于 2017-03-07 20:49:28 回复(0)
为什么我感觉只要维护一个小根堆就行了 , 所以堆排序
发表于 2017-03-03 22:59:07 回复(0)
答案 D
发表于 2017-02-26 14:41:06 回复(0)