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次才能输出正确的已排序序列,效率不是太好。

时间: 2024-10-13 20:45:32

shell排序算法的相关文章

对Shell排序算法的理解

Shell排序算法的基础是插入排序算法,所以在开始讲Shell排序算法之前,先讲讲插入排序算法. 我们先来看一个简单的小问题,给出一个已经排序好的数组arr以及另外一个数字n,如何将n放入到数组arr中,使得放入n后arr内的所有数字依然是有序的? int arr[10] = {3,4,7,8,10,33,56,66,100}; int n = 47; 显然我们想要的结果是{3,4,7,8,10,33,47,56,66,100},那么具体该怎么做呢?很容易就可以想到,最简单的做法就是从数组中最大

Java常见排序算法之Shell排序

在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let‘s go~~~ 1.排序算法的基本概念的讲解 时间复杂度:需要排序的的关键字的比较次数和相应的移动的次数. 空间复杂度:分析需要多少辅助的内存. 稳定性:如果记录两个关键字的A和B它们的值相等,经过排序后它们相对的位置没有发生交换,那么我们称这个排序算法是稳定的. 否则我们称这个排序算法是不稳定的

常见的几种排序算法

1 #include <stdio.h> 2 3 //直接插入排序算法 4 void InsertSort(int a[], int size) 5 { 6 int i, j; 7 int key; //待插入的值 8 for (j = 1; j < size; j++) 9 { 10 key = a[j]; 11 i = j - 1; 12 while (i >= 0 && a[i]>key) 13 { 14 a[i + 1] = a[i]; 15 i--;

插入排序与shell排序(希尔排序)

1 .插入排序的过程如同我们平时打扑克牌取牌插入的过程,不断将取出的扑克牌插入已经排好的地方. 插入排序过程初始有序区间大小为1,取出无序区间的首元素,查找有序区间的合适位置,进行插入.不断重复上述过程,即可完成操作. 图解示例 1 //插入排序 2 //karllen @2015 3 void insertSort() 4 { 5 int i ,j ,temp; 6 for(i = 1;i<n;++i) //从第二个元素开始插入 7 { 8 temp = a[i]; //a[i]会被覆盖,临时

十种常见排序算法

1.常见算法分类 十种常见排序算法一般分为以下几种: (1)非线性时间比较类排序:交换类排序(快速排序和冒泡排序).插入类排序(简单插入排序和希尔排序).选择类排序(简单选择排序和堆排序).归并排序(二路归并排序和多路归并排序): (2)线性时间非比较类排序:计数排序.基数排序和桶排序. 总结: (1)在比较类排序中,归并排序号称最快,其次是快速排序和堆排序,两者不相伯仲,但是有一点需要注意,数据初始排序状态对堆排序不会产生太大的影响,而快速排序却恰恰相反. (2)线性时间非比较类排序一般要优于

十种常见的排序算法,面试算法必考

1.冒泡排序 已知一组无序数据a[1].a[2].……a[n],需将其按升序排列.首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变.再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变.再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值.这样处理一轮后,a[n]的值一定是这组数据中最大的.再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的.再对a[1]~a[n-2]以相同方

几种常用排序算法(bubble、select、insert、shell、未完待续)

接下来两天重新看看几种常用的排序算法. 1.冒泡排序法 每次从 i=0开始比较相邻的元素,若arr[i]>arr[i+1],则交换它们.直到把最大的元素推向最后.回到 i=0,直至完成. 1 import java.util.Scanner; 2 class bubble 3 { 4 public static void main(String[] args) 5 { 6 int n,temp; 7 int i,j; 8 int[] arr=new int[10000]; 9 Scanner s

Java学习笔记——排序算法之希尔排序(Shell Sort)

落日楼头,断鸿声里,江南游子.把吴钩看了,栏杆拍遍,无人会,登临意. --水龙吟·登建康赏心亭 希尔算法是希尔(D.L.Shell)于1959年提出的一种排序算法.是第一个时间复杂度突破O(n2)的算法之一. 其基础是插入排序. 上代码: 1 public class ShellSort { 2 3 public static void shellSort(int[] arr){ 4 5 int increment = arr.length; 6 int temp;//牌 7 int i; 8

常见经典排序算法学习总结,附算法原理及实现代码(插入、shell、冒泡、选择、归并、快排等)

博主在学习过程中深感基础的重要,经典排序算法是数据结构与算法学习过程中重要的一环,这里对笔试面试最常涉及到的7种排序算法(包括插入排序.希尔排序.选择排序.冒泡排序.快速排序.堆排序.归并排序)进行了详解.每一种算法都有基本介绍.算法原理分析.算法代码. 转载请注明出处:http://blog.csdn.net/lsh_2013/article/details/47280135 插入排序 1)算法简介 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过