详谈排序算法之插入类排序(两种思路实现希尔排序)

public void Shell_Sort1(int[] A, int N) {int temp;for (int k = N / 2; k > 0; k /= 2) {// 希尔增量序列for (int i = k; i < N; i++) {// 每相隔k/2个增量进行操作for (int j = i; j >= k; j -= k) {if(A[j] < A[j – k]){temp = A[j – k];A[j – k] = A[j];A[j] = temp;}}}}for(int i = 0 ; i < N; i++){System.out.print(A[i] + " ");}}public void Shell_Sort2(int[] A, int N) {for (int k = N / 2; k > 0; k /= 2) {// 希尔增量序列for (int i = k; i < N; i++) {// 插入排序int temp = A[i];int j = i;for (; j >= k && A[j – k] > temp; j -= k)A[j] = A[j – k];A[j] = temp;}}for(int i = 0 ; i < N; i++){System.out.print(A[i] + " ");}}通过前面的分析,从直观上我们可以预见希尔排序的效率会较直接插入排序要高,然而对希尔排序的时间复杂度分析是一个复杂的问题,因为希尔排序的时间复杂度与步长序列的选取密切相关,如何选择步长序列才能使得希尔排序的时间复杂度达到最佳,这还是一个有待解决的问题。实际的应用中,在选择步长序列时应当注意:应使步长序列中的步长值互质,,并且最后一个步长值必须等于1。

绚丽的民族风情,悠久的历史文化。抛开尘世的纷扰,

详谈排序算法之插入类排序(两种思路实现希尔排序)

相关文章:

你感兴趣的文章:

标签云: