⑴ c语言数据结构希尔排序
void main()
{
datatype R[MAXNUM];
int d[6]=[50,25,12,6,3,2,1];
for(int i=0;i<MAXNUM;i++)
scanf("%d",&R[i].key);
ShellSort(R,MAXNUM,d,6);
for(int i=0;i<MAXNUM;i++)
printf("%d",R[i].key);
}
⑵ c语言中,希尔排序程序中的问题,运行不对,是什么原因
printf("\n排完序后的数字顺序:");
for(i=1;i<=10;i++);
应该是上面这语句多了一个分号。
求采纳
⑶ c语言 编程问题 希尔排序法
这里主要是先运算,再赋值,等号的右边优先级比左边高,这是C语言的运算的特性。所以,上面的意思,j先减去d ,再把值赋给j.希望楼主能看懂。
⑷ C语言数据结构问题,希尔排序
int d[t-1]可以?你这是C还是C++?C语言中数组的个数是确定的,for()里面的int i在前面定义,C不允许在for里面定义的,你的t没初始化,e是用来干什么的?e = e / 2,如果是整型,5/2等于2,2/2等于1,t就等于2了
⑸ c语言希尔排序
voidShellInsertSort(inta[],intn,intdk)
{
for(inti=dk;i<n;++i){
if(a[i]<a[i-dk]){//若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入
intj=i-dk;
intx=a[i];//复制为哨兵,即存储待排序元素
a[i]=a[i-dk];//首先后移一个元素
while(x<a[j]){//查找在有序表的插入位置
a[j+dk]=a[j];
j-=dk;//元素后移
}
a[j+dk]=x;//插入到正确位置
}
}
}
/**
*先按增量d(n/2,n为要排序数的个数进行希尔排序
*
*/
voidshellSort(inta[],intn){
intdk=n/2;
while(dk>=1){
ShellInsertSort(a,n,dk);
dk=dk/2;
}
}
⑹ c语言数据结构希尔排序
以d=3为增量进行一趟希希尔排序后每一趟的结果,
分别为d=3和d=1:
⑺ c语言实现希尔排序算法
希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。希尔排序实质上是一种分组插入方法。它的基本思想是:对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;然后,对各组内的元素进行直接插入排序。 这一趟排序完成之后,每一个组的元素都是有序的。然后减小gap的值,并重复执行上述的分组和排序。重复这样的操作,当gap=1时,整个数列就是有序的。
⑻ 希尔排序(c语言)
void ShellSort(int r[],int n)//希尔排序
{
for(int gap=n/2;gap>=1;gap=gap/2)//以增量为d进行直接插入排序
{
CountCompare[1]++;
for(int i=d+1;i<=n;i++)//将r[i]插入到所属的子序列中
{
r[0]=r[i];//暂存被插入记录
CountMove[1]++;
for(int j=i-d;j>0&&r[0]<r[j];j=j-gap)
{
r[j+d]=r[j];//记录后移gap个位置,保证仍在同一个子序列
CountCompare[1]++;
CountMove[1]++;
}
r[j+gap]=r[0];
CountMove[1]++;
}
for(int k=1;k<=n;k++)
cout<<r[i]<<" ";
}
}
//主程序就麻烦自己写了
⑼ 希尔排序(C语言)
假设第一次分组排序后,得到的数据从分别编号为0——9
则第二次分组排序是将编号为0、2、4、6、8的五个数排序,并将编号为1、3、5、7、9的五个数排序。
即:将265、694、438、742、129五个数排序,
再将301、076、863、751、937五个数排序
因为129是第一组五个数里最小的,所以把它排在最前面。
就是这样,建议找本数据结构书把算法重新复习一下。