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