首页 > 试题广场 >

考虑以下JAVA排序代码,对于array为{15,0,6,9

[单选题]
考虑以下JAVA排序代码,对于array为{15,0,6,9,3}时,运行sort方法,则最终排序结果为:
 public void sort(Comparable[] a) {
  int N = a.length;
  int h = 1;
  while (h < N / 3) {
   h = 3 * h + 1;// 1, 4, 13, 40, ...
  }
  while (h >= 1) {
   for (int i = h; i < N; i++) {
     for (int j = i;  j >= h && compareElement(a[j],  a[j - h]); j -= h) {
      exch(a, j, j - h);
    }
   }
   h = h / 3;
  }
 }
 
 public boolean compareElement(Comparable v, Comparable w) {
  return v.compareTo(w) < 0;
 }

 public static void exch(Comparable[] a, int i, int j) {
  Comparable t = a[i];
  a[i] = a[j];
  a[j] = t;
 }
  • 15,0,6,9,3
  • 0,15,6,9,3
  • 15,0,6,3,9
  • 0,3,6,9,15
这题本质上就是希尔排序。
具体希尔排序方法,参考:


发表于 2019-05-18 10:29:17 回复(0)
这个排序算法与插入排序有些相似之处,插入排序就是把整个序列看成有序的跟无序的两个部分,默认第一个元素是有序的,所以从第二个元素开始,依次与之前的元素进行比较,直到找到比自己大的元素然后插在该元素的前面,否则就插在前面元素的末尾。
这里的排序Sort方法,思路如下:先让第2个元素跟第一个元素比较,如果第二个大,则交换,然后第二次循环让第三个元素与第二个元素进行比较,比较之后交换或者不交换,这里还没结束,再继续让第二个与第一个进行比较,依次类推!
发表于 2020-09-09 17:23:47 回复(0)