码迷,mamicode.com
首页 > 编程语言 > 详细

【算法】【排序】【插入类】希尔排序 ShellSort

时间:2019-07-22 00:11:31      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:color   希尔   while   随机   class   eof   表示   print   return   

#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

标签:color   希尔   while   随机   class   eof   表示   print   return   

原文地址:https://www.cnblogs.com/LPworld/p/11223348.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!