首页 > 其他分享 >希尔排序的实现

希尔排序的实现

时间:2022-12-23 21:23:15浏览次数:41  
标签:typedef dk 实现 void elem int 希尔 SqList 排序

本题要求实现一趟希尔排序函数,待排序列的长度1<=n<=1000。

函数接口定义:

1 void  ShellInsert(SqList L,int dk);

其中L是待排序表,使排序后的数据从小到大排列。
###类型定义:

1 typedef  int  KeyType;
2 typedef  struct {                      
3   KeyType *elem; /*elem[0]一般作哨兵或缓冲区*/                       
4   int Length;      
5 }SqList;

裁判测试程序样例:

#include<stdio.h>
#include<stdlib.h>
typedef  int  KeyType;
typedef  struct {                      
  KeyType *elem; /*elem[0]一般作哨兵或缓冲区*/                       
  int Length;      
}SqList;
void  CreatSqList(SqList *L);/*待排序列建立,由裁判实现,细节不表*/ 
void  ShellInsert(SqList L,int dk);
void  ShellSort(SqList L);

int main()
{
  SqList L;
  int i;
  CreatSqList(&L);
  ShellSort(L);
  for(i=1;i<=L.Length;i++)
   {        
     printf("%d ",L.elem[i]);
   }
  return 0;
}
void   ShellSort(SqList L)
{
  /*按增量序列dlta[0…t-1]对顺序表L作Shell排序,假设规定增量序列为5,3,1*/
   int k;
   int dlta[3]={5,3,1};
   int t=3;
   for(k=0;k<t;++k)
       ShellInsert(L,dlta[k]);
} 
/*你的代码将被嵌在这里 */

代码如下:

void  ShellInsert(SqList L,int dk){
    for(int i=dk+1;i<=L.Length;i++){
        int p=i;
        L.elem[0]=L.elem[p];
        p-=dk;
        while(p>0&&L.elem[p]>L.elem[0]){
            L.elem[p+dk]=L.elem[p];
            p-=dk;
        }
        L.elem[p+dk]=L.elem[0];  
    }
}

 

标签:typedef,dk,实现,void,elem,int,希尔,SqList,排序
From: https://www.cnblogs.com/psh888/p/17001658.html

相关文章

  • python归并排序
    采用了分治法,把序列不断的等分序列,最后分成一个之后,再把它两两合并叠加起来,利用了扑克牌两个正序序列进行排序合并时间复杂度nlogn代码defmerge_sort(lists):if......
  • 栈实现表达式求值
    使用键盘输入数学表达式(含数字,四种运算符+、-、、/和小括号,其中运算数都是一位数(0~9)),将数学表达式转化成后缀表达式输出,利用后缀表达式求表达式的值并输出。输入格式:输......
  • 邻接表存储实现图的深度优先遍历
    编写程序,实现由邻接表存储实现无向图的深度优先搜索遍历的功能。顶点为字符型。输入格式:第一行输入顶点个数及边的个数,第二行依次输入各顶点,第三行开始依次输入边的两个......
  • 迪杰斯特拉方法实现最短路径
    用迪杰斯特拉算法实现有向网的最短路径输入格式:第一行输入有向网的顶点和边数,第二行输入各顶点值,用空格间隔,第三行开始输入各条边的两个点的及边上的权值,用空格间隔。......
  • 快速排序
    本题要求实现快速排序的一趟划分函数,待排序列的长度1<=n<=1000。函数接口定义:1intPartition(SqListL,intlow,inthigh);其中L是待排序表,使排序后的数据从小......
  • 堆排序
    本题要求实现堆排序中的筛选函数,待排序列的长度1<=n<=1000。函数接口定义:1voidHeapAdjust(HeapTypeH,ints,intm);其中L是待排序表,使排序后的数据从小到大排......
  • C语言实现通讯录
    前言通讯录的实现综合了C语言的不少基本语法、编程思想和好的编程习惯,深入理解此项目的实现有助于提高语言的实际应用能力。这个通讯录可以保存联系人的姓名、年龄、性别、......
  • 树莓派利用摄像头实现web在线监控
    1、https://shumeipai.nxez.com/2021/10/21/raspberry-pi-usb-camera-to-realize-remote-network-monitoring.html2、上个链接执行到第六步时,可以采用下面的方法:2.1若使......
  • 通过地址和索引实现数组
    CPU会把基址寄存器+变址寄存器的值解释为实际查看的内存地址。变址寄存器的值就相当于高级编程语言程序中数组的索引功能。数组是指同样长度的数据在内存中进行连续排列的......
  • C语言实现udp
    #include<stdio.h>#include<strings.h>#include"arpa/inet.h"typedefunionstd{unsignedshorta;unsignedcharb[2];}STD;voidudp_server(){......