1. public static void shellSort(int[] arr) {
    2. int temp;
    3. //第1轮
    4. //因为第1轮排序,是将10个数据分成了5组
    5. for (int i = 5; i < arr.length; i++) {
    6. //遍历各组中所有的元素(共5组,每组有2个元素),步长5
    7. for (int j = i - 5; j >= 0; j -= 5) {
    8. //如果当前元素大于加上步长后的那个元素,说明需要交换
    9. if (arr[j] > arr[j + 5]) {
    10. temp = arr[j];
    11. arr[j] = arr[j + 5];
    12. arr[j + 5] = temp;
    13. }
    14. }
    15. System.out.printf("第1.%d趟排序结果:", i - 4);
    16. System.out.println(Arrays.toString(arr));
    17. }
    18. System.out.println("第1趟排序结果:");
    19. System.out.println(Arrays.toString(arr));
    20. //第2轮
    21. //第2轮排序,是将10个数据分成了 5/2=2组
    22. for (int i = 2; i < arr.length; i++) {
    23. //遍历各组中所有的元素(共2组,每组有5个元素),步长5
    24. for (int j = i - 2; j >= 0; j -= 2) {
    25. //如果当前元素大于加上步长后的那个元素,说明需要交换
    26. if (arr[j] > arr[j + 2]) {
    27. temp = arr[j];
    28. arr[j] = arr[j + 2];
    29. arr[j + 2] = temp;
    30. }
    31. }
    32. System.out.printf("第2.%d趟排序结果:", i - 1);
    33. System.out.println(Arrays.toString(arr));
    34. }
    35. System.out.println("第2趟排序结果:");
    36. System.out.println(Arrays.toString(arr));
    37. //第3轮
    38. //第3轮排序,是将10个数据分成了 5/2/2=1组
    39. for (int i = 1; i < arr.length; i++) {
    40. //遍历各组中所有的元素(共1组,每组有10个元素),步长10
    41. for (int j = i - 1; j >= 0; j -= 1) {
    42. //如果当前元素大于加上步长后的那个元素,说明需要交换
    43. if (arr[j] > arr[j + 1]) {
    44. temp = arr[j];
    45. arr[j] = arr[j + 1];
    46. arr[j + 1] = temp;
    47. }
    48. }
    49. System.out.printf("第3.%d趟排序结果:", i);
    50. System.out.println(Arrays.toString(arr));
    51. }
    52. System.out.println("第3趟排序结果:");
    53. System.out.println(Arrays.toString(arr));
    54. }

    image.png