shell排序

来源:互联网 发布:不用充值约爱软件 编辑:程序博客网 时间:2024/05/17 18:13

希尔排序是一种插入排序算法,Shell排序又称作缩小增量排序。Shell排序的执行时间依赖于增量序列。
希尔排序的基本思想:先取一个小于n的整数d作为第一个增量,把文件的全部记录分成 d个组。所有距离为d的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 < d重复上述的分组和排序,直至所取的增量 dk = 1 (dk < dk-l < …< d2 < d),即所有记录放在同一组中进行直接插入排序为止。
该方法实质上是一种分组插入方法。

#include <stdio.h>#include <stdlib.h>#define MAX_SIZE 100#define D 5typedef char InfoType;typedef struct Sz{    int key;    InfoType *info;}Sz;typedef struct SQ//定义一个顺序线性表{    Sz *R;    int length;}SqList;int Init_SqList(SqList *L)//顺序线性表初始化{    L->R=(Sz *)malloc((MAX_SIZE + 1) * sizeof(Sz));    if(!L->R)        return 0;    else    {        L->length = 0;        return 1;    }}

进行一趟希尔排序

/*  对顺序表L进行一趟希尔排序, 增量为d  */void shell_pass(SqList *L, int d){    int j;    int k;    for(j = 1; j <= L->length; j++)    {        L->R[0] = L->R[j]; /*  设置监视哨兵  */        k = j + d;        while((k > 0) && (L->R[0].key > L->R[k].key))        {            L->R[j] = L->R[k];            L->R[k] = L->R[0];        }    }}

一直循环到增量d为1为止

/*按增量序列dk[0 … t-1],对顺序表L进行希尔排序*/void shell_sort(SqList *L, int dk[], int t){                      //dk是增量数组,t是dk的长度    int m;    for(m = 0; m <= t; m++)        shell_pass(L, dk[m]);//一直循环到增量d为1为止}

main方法

int main(){    int i;    int num;    int dk[D];    SqList L;    Init_SqList(&L);    for(i = D; i > 0; i--)//初始化增量数组    {        dk[D - i] = i;    }    /*输入排序码*/    printf("please enter the number of the data:");    scanf("%d", &num);    for(i = 1; i < num + 1; i++){        int values;        printf("please enter the data:");        scanf("%d", &values);        L.R[i].key = values;        L.length++;    }    for(i = 1; i <= L.length; i++)    {        printf("%d  ", L.R[i].key);    }    printf("\n");    printf("-----------------------------\n");    /*希尔排序*/    shell_sort(&L, dk, D);    for(i = 1; i <= L.length; i++)    {        printf("%d  ", L.R[i].key);    }    printf("\n");    return 0;}

例:
这里写图片描述
运行结果:
这里写图片描述

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电子远传水表图解 电阻远传压力表 无线远传水表 远传式压力变送器 单法兰远传压力变送器 智能远传水表 无线远传燃气表怎么开 远传液位计 远传 清宫良妃传 梦非远 远传压力表接线图解 远传压力表价格 电子远传水表 杭州远传新业科技有限公司 远传水表价格 磁翻板液位计带远传 远动会加油稿 远动加油稿 远动会作文 轻动远举 远动套装 泉州机场到动车站有多远 远动排烟防火阀 远动鞋品牌 波澜动远空 远华 远华集团 厦门远华大案 邢远博 远去的飞鹰 远去的路 远去 望着你远去我竟悲伤不能自已 远去的路图片 男士孤独而远去的背影图片 若爱不曾远去 地书之主 拂衣远去 他会自己长大远去是什么歌 地书传承 拂衣远去 漫天风沙里望着你远去歌名