前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一道排序面试题【20200103】

一道排序面试题【20200103】

作者头像
田维常
发布2020-02-13 15:52:33
2670
发布2020-02-13 15:52:33
举报

Java程序如下:

代码语言:javascript
复制
public class SortTest {
    public static void main(String[] args) {
        int[] a = {10, 20, 3, 21, 11, 10, 9, 3, 6 ,- 2};
        int i, j;
        int low, high, mid;
        int temp;
        for (i = 1; i < 10; i++) {
            temp = a[i];
            low = 0;
            high = i - 1;
            while (low <= high) {
                mid = (low + high) / 2;
                if (a[mid] > temp)
                    high = mid - 1;
                else
                    low = mid + 1;
            }
            for (j = i - 1; j > high; j--)
                a[j + 1] = a[j];
            a[high + 1] = temp;
        }
        //输出排序后结果
        for (i = 0; i < 10; i++) {
            System.out.print(a[i]+" ");
        }
    }
}

上面这段代码属于哪一种排序?

A,归并排序

B,快速排序

C,希尔排序

D,二分法排序

解析

从二分字面上理解的话,快速排序和归并排序都与二分相关;快速排序按照标值二分,小的在前,大的在后;而归并排序是按照下标二分,再分别对两个部分归并排序,先分后和,在和的过程中排序。

此外,还有一种二叉树排序,它的原理是:构造二叉树,小的在左,大的在右,将待排序的数一次插入,然后前序遍历即可,这种方法利用二叉树的特殊构造把每个数插入到恰当的位置,跟二分的概念略有关系。

目前比较公认的二分法排序是指折半插入排序。当直接插入排序进行到某一趟时候,对r[i].key来讲,前边i-1个记录极影按关键字有序,此时不用直接吃哈如排序的方法,而改为二分法折半查找,找出r[i].key应插的位置,然后插入。这种方法就是折半插入排序(二分法排序)。在二分法排序中,关键字的比较次数由于采用折半查找而减少,数量级为O(n log n),但是元素移动次数仍然为O(n二次方)。所以者半插入排序时间复杂度还是O(n二次方)。

答案:D

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java后端技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档