算法排序插入类希尔排序 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的主要内容,如果未能解决你的问题,请参考以下文章

算法 希尔排序

算法 希尔排序

插入排序和希尔排序的比较

希尔排序(ShellSort)

直接插入排序与缩小增量插入排序(希尔排序ShellSort)

SuperHakce 算法实践之希尔排序