ShellSort的Java程序

Shell排序是一种类似于插入排序的排序技术,其中对位于数组远端(两端)的元素进行排序。这样,下一个和倒数第二个元素之间的间隔大小减小了。对于数组中的所有元素都会发生这种情况,直到间隔距离减小到0。

示例

以下是Java中ShellSort的示例-

public class Demo {
   int shell_sort(int my_arr[]) {
      int arr_len = my_arr.length;
      for (int gap = arr_len / 2; gap > 0; gap /= 2) {
         for (int i = gap; i < arr_len; i += 1) {
            int temp = my_arr[i];
            int j;
            for (j = i; j >= gap && my_arr[j - gap] > temp; j -= gap)
            my_arr[j] = my_arr[j - gap];
            my_arr[j] = temp;
         }
      }
      return 0;
   }
   public static void main(String args[]) {
      int my_arr[] = { 12, 34, 54, 2, 3 };
      Demo my_instance = new Demo();
      my_instance.shell_sort(my_arr);
      System.out.println("The array, after performing shell sort is : ");
      int arr_len = my_arr.length;
      for (int i = 0; i < arr_len; ++i)
      System.out.print(my_arr[i] + " ");
      System.out.println();
   }
}

输出结果

The array, after performing shell sort is :
2 3 12 34 54

说明

该算法对彼此远离的元素进行排序,从而减小了这两个元素之间的间隔。可以将其理解为插入排序的通用版本。首先对数组中特定间隔的元素进行排序,它们的间隔距离会减小,从而对过程中的所有元素进行排序。

迭代第一个循环时,将获取数组的大小,如果大小未排序,则比较并交换size / 2之间的元素。对于所有其他元素重复相同的操作。通过定义一个临时变量并交换元素来对元素进行排序。

在第二个循环迭代中,对size / 4个元素进行比较和排序。其余元素进行相同的过程,从而对它们进行排序。在main函数中,定义了数组,并通过将该数组作为参数来调用'shell_sort'函数。