Java程序如下:
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