栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【无标题】二叉排序,C语言,结构体

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【无标题】二叉排序,C语言,结构体

1.用结构体数组实现希尔排序,源代码如下

把arr[0]没用实际值,从1+delat开始搞

#include

typedef int KeyType; 

typedef struct{

 KeyType key;

 //其他信息; 

}RecordType;

void print(RecordType a[],int length){

 int i=1;

 for(i=1;i<=length;i++){

  printf("%d ",a[i].key);

 }

 printf("n");

}

void Shellnsert(RecordType arr[],int length,int dalat){

 int i,j;

 for(i=1+dalat;i<=length;i++){

  if(arr[i].key

   arr[0]=arr[i];

   for(j=i-dalat;j>0&&arr[0].key

    arr[j+dalat]=arr[j];

   }

   arr[j+dalat]=arr[0];

  }

 } 

}

void ShellSort(RecordType arr[],int length,int dalat[],int m){

 int i;

 for(i=0;i

  Shellnsert(arr,length,dalat[i]);

 }

}

int main()

{

 RecordType arr[8];

 arr[1].key=46;

 arr[2].key=17;

 arr[3].key=5;

 arr[4].key=42;

 arr[5].key=94;

 arr[6].key=55;

 arr[7].key=13;

 arr[8].key=70;

 int length=8;

 print(arr,length);

 int dalta[3]={length/2,length/4,length/8};

 ShellSort(arr,length,dalta,3);

 print(arr,length);//数组名,长度,增量数组名,增量数组长度 

 return 0;

}

2.用普通数组实现希尔排序,源代码如下

主要是三个for循环难理解,需要给自己找个例子画一画,就会理解了

#include

void print(int arr[],int n){

 int i=0;

 for(i=0;i

  printf("%d ",arr[i]);

 }

 printf("n"); 

}

void shell(int arr[],int n){

 int i,j,inc,key,o=1;

 for(inc=n/2;inc>0;inc/=2){

  printf("%dn",o++);

  for(i=inc;i

   key=arr[i]; 

  

  for(j=i;j>=inc&&key

  {//与前面的进行比较,步长为inc j-inc就是前面元素的下标 

  arr[j]=arr[j-inc];

  }

  arr[j]=key;

  print(arr,12);

 }

}}

 

int main()

{

 int arr[]={15,14,8,9,3,12,13,7,11,10,1,6};

 print(arr,12);

 shell(arr,12);

 return 0;

 } 

 欢迎大家提问交流 本人也是初次玩这个

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887047.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号