• 八大排序算法(三) Shell排序


    这里写图片描述
    代码:

    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    #define SIZE 10
    int n[SIZE];
    
    void init(int n[], int len){
        int i;
        srand((unsigned)time(NULL));
        for (i=0; i<len; i++){
            n[i] = rand()%10+1;
        }
    }
    
    void printout(int n[], int len){
        int i;
        for (i=0; i<len; i++){
            printf("%d ", n[i]);
        }
        printf("
    ");
    }
    
    void ShellSort(int n[], int len, int s){
        // n    要进行排充的数组
        // len  数组的长度
        // s    每次要递增的长度
    
        int i, j ,k;
        int tmp;
        for (k=s; k>0; k>>=1){
            // 分组排序, 每个数字都要用到
            for (i=k; i<len; i++){
                tmp = n[i];  // tmp 为 n[i]
                j = i-k;    //  j 为此段第一个首次的位置
                /* 组内排序, 将 temp 直接插入组合内合适的记录位置
                    并不断地向前进行,向前插入
                */
                while (j>=0 && tmp < n[j]){
                    n[j+k] = n[j];
                    j -= k;
                }
                n[j+k] = tmp;
            }
        }
    
    }
    
    
    int main(){
        init(n, SIZE);
        printout(n, SIZE);
        ShellSort(n, SIZE, 4);
        printout(n, SIZE);
        return 0;
    }

    运行图:
    这里写图片描述

  • 相关阅读:
    hdoj 1872 稳定排序
    nyoj 60 谁获得了最高奖学金
    hdoj 2066 一个人的旅行
    nyoj 8 一种排序
    bzoj1798 1
    bzoj4031
    SPOJ-HIGH
    学习笔记::矩阵树定理
    学习笔记::树上莫队
    Strip
  • 原文地址:https://www.cnblogs.com/laohaozi/p/8266581.html
Copyright © 2020-2023  润新知