数据结构(C语言版)——希尔排序(代码版)

    科技2022-07-15  118

    一、代码

    #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define MAXSIZE 20 typedef int Status; void shellSort(int data[],int dataArrLenght); void shellSort(int data[],int dataArrLenght); int main(int argc, char *argv[]) { int data[MAXSIZE],i,arrSize; printf("请输入待排序的数组大小:"); if(scanf("%d",&arrSize)==0) { printf("输入有误!\n"); return ERROR; } printf("请输入待排序数组:"); data[0]=0; for(i=1;i<=arrSize;i++) { scanf("%d",&data[i]); } printf("开始简单选择排序\n"); shellSort(data,arrSize); for(i=1;i<=arrSize;i++) { printf("]",data[i]); } return 0; } void shellSort(int data[],int dataArrLenght) { int increment=dataArrLenght; int i,j; do{ increment=increment/3+1;//增量序列 for(i=increment+1;i<=dataArrLenght;i++) { if(data[i]<data[i-increment]) { data[0]=data[i]; for(j=i-increment;j>0&&data[j]>data[0];j-=increment) { data[j+increment]=data[j];//元素后移动 } data[j+increment]=data[0]; } } }while(increment>1); }

    二、算法解释

    其实希尔排序和直接插入排序差不多,两者主要的差别在于希尔排序中有增量概念但是核心代码很相似。其中增量的作用就是把一个数列分为若干部分,每个部分的相同位置元素进行比较。

    三、运行代码

    Processed: 0.016, SQL: 8