一、代码
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 20
typedef int Status
;
void shellSort(int data
[],int dataArrLenght
);
void shellSort(int data
[],int dataArrLenght
);
int main(int argc
, char *argv
[]) {
int data
[MAXSIZE
],i
,arrSize
;
printf("请输入待排序的数组大小:");
if(scanf("%d",&arrSize
)==0)
{
printf("输入有误!\n");
return ERROR
;
}
printf("请输入待排序数组:");
data
[0]=0;
for(i
=1;i
<=arrSize
;i
++)
{
scanf("%d",&data
[i
]);
}
printf("开始简单选择排序\n");
shellSort(data
,arrSize
);
for(i
=1;i
<=arrSize
;i
++)
{
printf("]",data
[i
]);
}
return 0;
}
void shellSort(int data
[],int dataArrLenght
)
{
int increment
=dataArrLenght
;
int i
,j
;
do{
increment
=increment
/3+1;
for(i
=increment
+1;i
<=dataArrLenght
;i
++)
{
if(data
[i
]<data
[i
-increment
])
{
data
[0]=data
[i
];
for(j
=i
-increment
;j
>0&&data
[j
]>data
[0];j
-=increment
)
{
data
[j
+increment
]=data
[j
];
}
data
[j
+increment
]=data
[0];
}
}
}while(increment
>1);
}
二、算法解释
其实希尔排序和直接插入排序差不多,两者主要的差别在于希尔排序中有增量概念但是核心代码很相似。其中增量的作用就是把一个数列分为若干部分,每个部分的相同位置元素进行比较。
三、运行代码
转载请注明原文地址:https://blackberry.8miu.com/read-8750.html