请帮忙排序,用希尔排序且是C语言实现

来源:百度知道 编辑:UC知道 时间:2024/06/14 17:25:08
#include<stdio.h>
void main()
{
int i,j,t;
int a[10]={12,31,45,67,86,90,30,23,17,65};
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf("\n");
for(j=0;j<9;j++)
for (i=j+1;i<10;i++)
if (a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
}

1.请问这里用到的排序是冒泡,还是选择排序?

2.有一组数字:3,24,100,6,46,77,21,11,90,55;请帮忙排序,用希尔排序且是C语言实现.
我有看到别人写的一个希尔排序,我在 VC++6.0环境下运行,可以正确实现排序. 不过我自己还是没有彻底理解,现代码分享如下:,请懂得的人帮忙分析一下.

void shell_sort(int *x, int n)
{
int h, j, k, t;
for (h=n/2; h>0; h=h/2)
{
for (j=h; j<n; j++)
{
t = *(x+j);
for (k=j-h; (k>=0 && t<*(x+k)); k-=h)
{
*(x+k+h) = *(x+k);
}
*(x+k+h) = t;
}
}
}

是选择排序

#include<stdio.h>
void main()
{
int i,j,t,k,m,ture;
ture=1;
int a[10]={12,31,45,67,86,90,30,23,17,65};
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf("\n");
for(k=10/2;k>0;k/=2)//这里你自己可以一些相关的基数
for(j=0;j<k;j++)
for (i=j,m=i+k;i<10&&m<10&&ture;i+=k,m+=k){
ture=0;
if (a[i]<a[m])
{
ture=1;
t=a[i];
a[i]=a[m];
a[m]=t;
}
}
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
}