算法排序插入类希尔排序 ShellSort
Posted lpworld
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法排序插入类希尔排序 ShellSort相关的知识,希望对你有一定的参考价值。
#include<stdio.h> #include <time.h> #include<stdlib.h> int main() int a[15]; //设立随机数 srand(time(0)); for(int i=0;i<15;i++) a[i]=rand()%(30); //随机数范围0到29之间 //数组a的大小 int size=sizeof(a)/4; //打印数组信息 for(int i=0;i<size;i++) printf("%d ",a[i]); void ShellSort(int a[],int size); ShellSort(a,size); return 0; void ShellSort(int a[],int size) int all=size; int l=size; //比较距离 :距离l //交换两个地址的值 void swap(int* i,int* j); while(true) //比较距离减半 //若比较距离为0,退出循环 l=l/2; if(l==0) break; //输出比较距离的值 printf("\n%d\n",l); //向右比较 for(int i=0;i<all-l;i++) //如果遇到小的值x在右边 if(a[i]>a[i+l]) //先把当前位置的值和x交换 swap(a+i,a+i+l); //如果 当前位置 在当前比较距离下 曾被比较过 if(i-l>=0) //那么还要从此位置开始向左比较 for(int j=i;j-l>=0;j=j-l) //直到x移动到合适的位置: *(dx-l)<*dx<*(dx+l) if(a[j]<a[j-l]) swap(a+j,a+j-l); else //由于前面的位置已经排序过了,若遇到比x小的数就表示到达合适位置 goto leftend; leftend: //打印数组信息 for(int i=0;i<size;i++) printf("%d ",a[i]); void swap(int* i,int* j) int t=*j; *j=*i; *i=t;
以上是关于算法排序插入类希尔排序 ShellSort的主要内容,如果未能解决你的问题,请参考以下文章