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'函数。