【无标题】二叉排序,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("%d\n",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;

 } 

【无标题】二叉排序,C语言,结构体_第1张图片

 欢迎大家提问交流 本人也是初次玩这个【无标题】二叉排序,C语言,结构体_第2张图片

 

你可能感兴趣的:(c语言,数据结构,排序算法)