shell排序
[code=c#include<stdio.h>
#include<string.h>
struct medal
{
char name[10];
int gold;
int sliv;
int bron;
};
int comp(const void *a,const void *b);
void swap(char *a,char *b,int width);
void shellsort(void *x,int n,int size,int (*fcmp)(const void *a,const void *b));
void Print(struct medal a[],int n);
int main()
{
struct medal country[10]={
{"Japan",1,3,1},
{"America",8,3,1},
{"Germany",2,5,6},
{"England",3,2,5},
{"France",4,8,6},
{"Canada",2,6,0},
{"Korea",5,3,6},
{"Australia",3,2,6},
{"India",1,3,1},
{"China",8,3,1}
};
shellsort(country,10,sizeof(country[0]),comp);
Print(country,10);
return 0;
}
int comp(const void *a,const void *b)
{
struct medal *pa;
struct medal *pb;
pa=(struct medal *)a;
pb=(struct medal *)b;
if(pa->gold != pb->gold)
return pa->gold - pb->gold;
if(pa->sliv != pb->sliv)
return pa->sliv - pb->sliv;
if(pa->bron != pb->bron)
return pa->bron - pb->bron;
return strcmp(pb->name,pa->name);
}
void swap(char *a,char *b,int width)
{
if(a!=b)
{
while(width--){
*b=*a;
a++;
b++;
}
}
}
void shellsort(void *x,int n,int size,int (*fcmp)(const void *,const void *))
{
struct medal temp;
struct medal *tp ,*gp,*gq;
tp=(struct medal *)x;
int gap,gapwidth,i;
char *p,*q;
p=(char *)x;
for(gap=n/2;gap>=1;gap/=2)
{
for(i=gap;i<n;i++)
{
temp=tp[i];
gapwidth=gap*size;
for(q=p+(i-gap)*size; q>=p && comp(p+i*size,q)>0 ; q-=gapwidth)
swap(q,q+gapwidth,size);
gp=(struct medal *)(q+gapwidth);
strcmp(gp->name,temp.name);
gp->gold=temp.gold;
gp->sliv=temp.sliv;
gp->bron=temp.bron;
}
}
}
void Print(struct medal a[],int n)
{
int i;
printf("\n 国家 金牌 银牌 铜牌 \n");
for(i=0;i<n;i++)
{
printf("%10s%8d%8d%8d\n",a[i].name,a[i].gold,a[i].sliv,a[i].bron);
}
}][/code]
相关推荐
C语言基本排序算法之shell排序实例
本文实例讲述了C语言基本排序算法之shell排序。分享给大家供大家参考,具体如下: shell排序是对直接插入方法的改进方法. /*------------------------------------------------------------------------------------- Shell_sort.h shell排序是对直接插入方法的改进,它并不是对相邻元素进行比较,而是对一定间隔的元素比较. 选择增量序列的几种方法:(为方便,本例采用第一种增量序列) 1. h[1]=size, h[k] = h[k-1]/2. 最坏运行时间为O(N^2). 最坏情形:数组
解析shell排序的实现代码
本篇文章是对shell排序的实现代码进行了详细的分析介绍,需要的朋友参考下
Shell中字符串排序的几种方法
今天小编就为大家分享一篇关于Shell中字符串排序的几种方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
C 冒泡Shell排序算法
冒泡 插入 选择排序
C++的Shell排序算法代码学习
c++ 语言的应用#include using namespace std; template void ShellInsert(T a[],size_t a_size,size_t dk) { for(int i=dk;i!=a_size;++i){ cout<<i<<endl; if(a[i]=0 && temp<a[j];j-=dk){ a[j+dk]=a[j]; } a[j+dk]=temp; } } } template void ShellSort(T a[],size_t a_size,size_t dlta[],size_t dlta_size) { for(int i=0;i!=dlta_size;++i) ShellInsert(a,a_size,dlta[i]); } int main() { int inta[]={7,1,3,4,5,10,2,6,9,8}; int intb[]={49,38,65,97,76,13,27,49,55,4}; size_t dlta[]={5,3,2,1}; cout<<\"The sorted result:\"<<endl; ShellSort(inta,10,dlta,4); for(size_t i=0;i!=10;++i) { cout<<inta[i]<<\" \"; } return EXIT_SUCCESS; }


其它技术问题
