shell排序算法

Posted lrxing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell排序算法相关的知识,希望对你有一定的参考价值。

今天看《The C Programming Language》的时候看到了shell排序算法,

/* shellsort: sort v[0]...v[n-1] into increasing order */
void shellsort(int v[], int n)
{
    int gap, i, j, temp;
    for (gap = n/2; gap > 0; gap /= 2)
        for (i = gap; i < n; i++)
            for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-=gap) {
                temp = v[j];
                v[j] = v[j+gap];
                v[j+gap] = temp;
            }
}

代码三两行,竟然有3个for循环,眼睛都快瞅瞎了也没有瞅明白,所以就加了一些debug信息,方便分析shell排序的原理。

/* lrxing 2016
 * 
 * shell 排序算法
 * 基本思想:
 *     先比较距离远的元素,而不是像简单交换排序算法那样先比较相邻的元素。
 *     这样可以快速减少大量的无序情况,从而减轻后续的工作。
 *     被比较的元素之间的距离逐步减少,直到减少为 1,这时排序变成了相邻元素的互换。
 * 代码描述:
 *     为了形象的观察shell排序的工作方式,打印出了代码的每一次循环时数组的状态,
 *     以及当前正在比较的两个值的位置。
 */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_LENGTH 20
#define DEBUG 1

void shellsort(int v[], int n)
{
#if DEBUG
    printf("Start to sort...\n");
#endif
    int gap, i, j, temp,k, count = 0;
    for(gap = n / 2; gap > 0; gap /= 2)
    {
#if DEBUG
        printf("==>GAP : %d\n", gap);
#endif
        for(i = gap; i < n; i++)
        {
#if DEBUG
            printf("====>i : %d\n", i);
#endif
            for(j = i-gap; j>=0/* && v[j] >v[j+gap]*/; j -= gap)
            {
#if DEBUG
                count++;
                for(k = 0; k < n; k++)
                {
                    printf("%3d ", v[k]);
                }
                printf("\n");
                for(k = 0; k < n; k++)
                {
                    if(k == j || k == (j+gap))
                        printf("%3c ", ^);
                    else
                        printf("    ");
                }
                printf("\n");
#endif
                if(v[j] >v[j+gap])
                {
                    temp = v[j];
                    v[j] = v[j+gap];
                    v[j+gap] = temp;
                }
            }
        }
    }
#if DEBUG
    printf("Totally loop %d Times.\n", count);
#endif
}

int main()
{
    int arr[MAX_LENGTH], i;
    srand((int)time(NULL));
    printf("Unsorted Array:\n");
    /* 初始化一个乱序数组,随机生成20个1000以内的正整数 */
    for(i = 0; i< MAX_LENGTH; i++)
    {
        arr[i] = rand()%1000;
        printf("[%d] ", arr[i]);
    }
    printf("\n");
    /* 调用shell排序函数进行排序 */
    shellsort(arr, MAX_LENGTH);
    printf("Sorted Array:\n");
    for(i = 0; i< MAX_LENGTH; i++)
    {
        printf("[%d] ", arr[i]);
    }
    printf("\n");
    return 0;
}

随机生成一个长度为20的数组,然后进行排序,并将每一次判断的状态打印出来

Unsorted Array:
[17] [444] [770] [702] [653] [872] [660] [567] [58] [877] [153] [218] [984] [985] [88] [665] [379] [337] [520] [850] 
Start to sort...
==>GAP : 10
====>i : 10
 17 444 770 702 653 872 660 567  58 877 153 218 984 985  88 665 379 337 520 850 
  ^                                       ^                                     
====>i : 11
 17 444 770 702 653 872 660 567  58 877 153 218 984 985  88 665 379 337 520 850 
      ^                                       ^                                 
====>i : 12
 17 218 770 702 653 872 660 567  58 877 153 444 984 985  88 665 379 337 520 850 
          ^                                       ^                             
====>i : 13
 17 218 770 702 653 872 660 567  58 877 153 444 984 985  88 665 379 337 520 850 
              ^                                       ^                         
====>i : 14
 17 218 770 702 653 872 660 567  58 877 153 444 984 985  88 665 379 337 520 850 
                  ^                                       ^                     
====>i : 15
 17 218 770 702  88 872 660 567  58 877 153 444 984 985 653 665 379 337 520 850 
                      ^                                       ^                 
====>i : 16
 17 218 770 702  88 665 660 567  58 877 153 444 984 985 653 872 379 337 520 850 
                          ^                                       ^             
====>i : 17
 17 218 770 702  88 665 379 567  58 877 153 444 984 985 653 872 660 337 520 850 
                              ^                                       ^         
====>i : 18
 17 218 770 702  88 665 379 337  58 877 153 444 984 985 653 872 660 567 520 850 
                                  ^                                       ^     
====>i : 19
 17 218 770 702  88 665 379 337  58 877 153 444 984 985 653 872 660 567 520 850 
                                      ^                                       ^ 
==>GAP : 5
====>i : 5
 17 218 770 702  88 665 379 337  58 850 153 444 984 985 653 872 660 567 520 877 
  ^                   ^                                                         
====>i : 6
 17 218 770 702  88 665 379 337  58 850 153 444 984 985 653 872 660 567 520 877 
      ^                   ^                                                     
====>i : 7
 17 218 770 702  88 665 379 337  58 850 153 444 984 985 653 872 660 567 520 877 
          ^                   ^                                                 
====>i : 8
 17 218 337 702  88 665 379 770  58 850 153 444 984 985 653 872 660 567 520 877 
              ^                   ^                                             
====>i : 9
 17 218 337  58  88 665 379 770 702 850 153 444 984 985 653 872 660 567 520 877 
                  ^                   ^                                         
====>i : 10
 17 218 337  58  88 665 379 770 702 850 153 444 984 985 653 872 660 567 520 877 
                      ^                   ^                                     
 17 218 337  58  88 153 379 770 702 850 665 444 984 985 653 872 660 567 520 877 
  ^                   ^                                                         
====>i : 11
 17 218 337  58  88 153 379 770 702 850 665 444 984 985 653 872 660 567 520 877 
                          ^                   ^                                 
 17 218 337  58  88 153 379 770 702 850 665 444 984 985 653 872 660 567 520 877 
      ^                   ^                                                     
====>i : 12
 17 218 337  58  88 153 379 770 702 850 665 444 984 985 653 872 660 567 520 877 
                              ^                   ^                             
 17 218 337  58  88 153 379 770 702 850 665 444 984 985 653 872 660 567 520 877 
          ^                   ^                                                 
====>i : 13
 17 218 337  58  88 153 379 770 702 850 665 444 984 985 653 872 660 567 520 877 
                                  ^                   ^                         
 17 218 337  58  88 153 379 770 702 850 665 444 984 985 653 872 660 567 520 877 
              ^                   ^                                             
====>i : 14
 17 218 337  58  88 153 379 770 702 850 665 444 984 985 653 872 660 567 520 877 
                                      ^                   ^                     
 17 218 337  58  88 153 379 770 702 653 665 444 984 985 850 872 660 567 520 877 
                  ^                   ^                                         
====>i : 15
 17 218 337  58  88 153 379 770 702 653 665 444 984 985 850 872 660 567 520 877 
                                          ^                   ^                 
 17 218 337  58  88 153 379 770 702 653 665 444 984 985 850 872 660 567 520 877 
                      ^                   ^                                     
 17 218 337  58  88 153 379 770 702 653 665 444 984 985 850 872 660 567 520 877 
  ^                   ^                                                         
====>i : 16
 17 218 337  58  88 153 379 770 702 653 665 444 984 985 850 872 660 567 520 877 
                                              ^                   ^             
 17 218 337  58  88 153 379 770 702 653 665 444 984 985 850 872 660 567 520 877 
                          ^                   ^                                 
 17 218 337  58  88 153 379 770 702 653 665 444 984 985 850 872 660 567 520 877 
      ^                   ^                                                     
====>i : 17
 17 218 337  58  88 153 379 770 702 653 665 444 984 985 850 872 660 567 520 877 
                                                  ^                   ^         
 17 218 337  58  88 153 379 770 702 653 665 444 567 985 850 872 660 984 520 877 
                              ^                   ^                             
 17 218 337  58  88 153 379 567 702 653 665 444 770 985 850 872 660 984 520 877 
          ^                   ^                                                 
====>i : 18
 17 218 337  58  88 153 379 567 702 653 665 444 770 985 850 872 660 984 520 877 
                                                      ^                   ^     
 17 218 337  58  88 153 379 567 702 653 665 444 770 520 850 872 660 984 985 877 
                                  ^                   ^                         
 17 218 337  58  88 153 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
              ^                   ^                                             
====>i : 19
 17 218 337  58  88 153 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
                                                          ^                   ^ 
 17 218 337  58  88 153 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
                                      ^                   ^                     
 17 218 337  58  88 153 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
                  ^                   ^                                         
==>GAP : 2
====>i : 2
 17 218 337  58  88 153 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
  ^       ^                                                                     
====>i : 3
 17 218 337  58  88 153 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
      ^       ^                                                                 
====>i : 4
 17  58 337 218  88 153 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
          ^       ^                                                             
 17  58  88 218 337 153 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
  ^       ^                                                                     
====>i : 5
 17  58  88 218 337 153 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
              ^       ^                                                         
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
      ^       ^                                                                 
====>i : 6
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
                  ^       ^                                                     
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
          ^       ^                                                             
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
  ^       ^                                                                     
====>i : 7
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
                      ^       ^                                                 
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
              ^       ^                                                         
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
      ^       ^                                                                 
====>i : 8
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
                          ^       ^                                             
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
                  ^       ^                                                     
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
          ^       ^                                                             
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
  ^       ^                                                                     
====>i : 9
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
                              ^       ^                                         
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
                      ^       ^                                                 
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
              ^       ^                                                         
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
      ^       ^                                                                 
====>i : 10
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
                                  ^       ^                                     
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
                          ^       ^                                             
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
                  ^       ^                                                     
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
          ^       ^                                                             
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
  ^       ^                                                                     
====>i : 11
 17  58  88 153 337 218 379 567 520 653 665 444 770 702 850 872 660 984 985 877 
                                      ^       ^                                 
 17  58  88 153 337 218 379 567 520 444 665 653 770 702 850 872 660 984 985 877 
                              ^       ^                                         
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                      ^       ^                                                 
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
              ^       ^                                                         
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
      ^       ^                                                                 
====>i : 12
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                                          ^       ^                             
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                                  ^       ^                                     
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                          ^       ^                                             
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                  ^       ^                                                     
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
          ^       ^                                                             
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
  ^       ^                                                                     
====>i : 13
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                                              ^       ^                         
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                                      ^       ^                                 
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                              ^       ^                                         
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                      ^       ^                                                 
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
              ^       ^                                                         
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
      ^       ^                                                                 
====>i : 14
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                                                  ^       ^                     
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                                          ^       ^                             
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                                  ^       ^                                     
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                          ^       ^                                             
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                  ^       ^                                                     
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
          ^       ^                                                             
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
  ^       ^                                                                     
====>i : 15
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                                                      ^       ^                 
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                                              ^       ^                         
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                                      ^       ^                                 
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                              ^       ^                                         
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                      ^       ^                                                 
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
              ^       ^                                                         
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
      ^       ^                                                                 
====>i : 16
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 850 872 660 984 985 877 
                                                          ^       ^             
 17  58  88 153 337 218 379 444 520 567 665 653 770 702 660 872 850 984 985 877 
                                                  ^       ^                     
 17  58  88 153 337 218 379 444 520 567 665 653 660 702 770 872 850 984 985 877 
                                          ^       ^                             
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                                  ^       ^                                     
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                          ^       ^                                             
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                  ^       ^                                                     
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
          ^       ^                                                             
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
  ^       ^                                                                     
====>i : 17
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                                                              ^       ^         
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                                                      ^       ^                 
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                                              ^       ^                         
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                                      ^       ^                                 
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                              ^       ^                                         
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                      ^       ^                                                 
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
              ^       ^                                                         
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
      ^       ^                                                                 
====>i : 18
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                                                                  ^       ^     
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                                                          ^       ^             
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                                                  ^       ^                     
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                                          ^       ^                             
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                                  ^       ^                                     
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                          ^       ^                                             
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                  ^       ^                                                     
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
          ^       ^                                                             
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
  ^       ^                                                                     
====>i : 19
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 984 985 877 
                                                                      ^       ^ 
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                                                              ^       ^         
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                                                      ^       ^                 
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                                              ^       ^                         
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                                      ^       ^                                 
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                              ^       ^                                         
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                      ^       ^                                                 
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
              ^       ^                                                         
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
      ^       ^                                                                 
==>GAP : 1
====>i : 1
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 2
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
      ^   ^                                                                     
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 3
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
          ^   ^                                                                 
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
      ^   ^                                                                     
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 4
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
              ^   ^                                                             
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
          ^   ^                                                                 
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
      ^   ^                                                                     
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 5
 17  58  88 153 337 218 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 6
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                      ^   ^                                                     
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 7
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                          ^   ^                                                 
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                      ^   ^                                                     
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 8
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                              ^   ^                                             
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                          ^   ^                                                 
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                      ^   ^                                                     
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 9
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                                  ^   ^                                         
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                              ^   ^                                             
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                          ^   ^                                                 
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                      ^   ^                                                     
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 10
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                                      ^   ^                                     
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                                  ^   ^                                         
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                              ^   ^                                             
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                          ^   ^                                                 
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                      ^   ^                                                     
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 11
 17  58  88 153 218 337 379 444 520 567 660 653 665 702 770 872 850 877 985 984 
                                          ^   ^                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                      ^   ^                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                  ^   ^                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                              ^   ^                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                          ^   ^                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                      ^   ^                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 12
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                              ^   ^                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                          ^   ^                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                      ^   ^                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                  ^   ^                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                              ^   ^                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                          ^   ^                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                      ^   ^                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 13
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                                  ^   ^                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                              ^   ^                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                          ^   ^                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                      ^   ^                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                  ^   ^                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                              ^   ^                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                          ^   ^                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                      ^   ^                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 14
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                                      ^   ^                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                                  ^   ^                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                              ^   ^                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                          ^   ^                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                      ^   ^                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                  ^   ^                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                              ^   ^                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                          ^   ^                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                      ^   ^                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 15
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                                          ^   ^                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                                      ^   ^                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                                  ^   ^                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                              ^   ^                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                          ^   ^                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                      ^   ^                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                  ^   ^                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                              ^   ^                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                          ^   ^                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                      ^   ^                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
  ^   ^                                                                         
====>i : 16
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 872 850 877 985 984 
                                                              ^   ^             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                          ^   ^                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                      ^   ^                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                  ^   ^                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                              ^   ^                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                          ^   ^                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                      ^   ^                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                  ^   ^                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                              ^   ^                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                          ^   ^                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                      ^   ^                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
  ^   ^                                                                         
====>i : 17
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                                  ^   ^         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                              ^   ^             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                          ^   ^                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                      ^   ^                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                  ^   ^                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                              ^   ^                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                          ^   ^                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                      ^   ^                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                  ^   ^                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                              ^   ^                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                          ^   ^                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                      ^   ^                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
  ^   ^                                                                         
====>i : 18
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                                      ^   ^     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                                  ^   ^         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                              ^   ^             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                          ^   ^                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                      ^   ^                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                  ^   ^                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                              ^   ^                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                          ^   ^                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                      ^   ^                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                  ^   ^                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                              ^   ^                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                          ^   ^                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                      ^   ^                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
  ^   ^                                                                         
====>i : 19
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 985 984 
                                                                          ^   ^ 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
                                                                      ^   ^     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
                                                                  ^   ^         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
                                                              ^   ^             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
                                                          ^   ^                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
                                                      ^   ^                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
                                                  ^   ^                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
                                              ^   ^                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
                                          ^   ^                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
                                      ^   ^                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
                                  ^   ^                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
                              ^   ^                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
                          ^   ^                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
                      ^   ^                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
                  ^   ^                                                         
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
              ^   ^                                                             
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
          ^   ^                                                                 
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
      ^   ^                                                                     
 17  58  88 153 218 337 379 444 520 567 653 660 665 702 770 850 872 877 984 985 
  ^   ^                                                                         
Totally loop 320 Times.
Sorted Array:
[17] [58] [88] [153] [218] [337] [379] [444] [520] [567] [653] [660] [665] [702] [770] [850] [872] [877] [984] [985]

从记录的循环判断次数可以看到,长度为20的数组,需要判断320次才能输出正确的已排序序列,效率不是太好。

以上是关于shell排序算法的主要内容,如果未能解决你的问题,请参考以下文章

Java排序算法 - 堆排序的代码

算法之排序算法-shell排序(移位法)

排序算法系列:Shell 排序算法

算法——排序算法个人总结

排序算法——Shell排序

算法之排序算法-shell排序(交换法)