希尔排序是个什么东西,我把几年前做的ppt贴上来吧,我觉得也很好理解,然后附上几个代码,大家可以看看。
幻灯片1.PNG 幻灯片2.PNG 幻灯片3.PNG 幻灯片4.PNG 幻灯片5.PNG 幻灯片6.PNG 幻灯片7.PNG
来看代码:
- c版
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define P 8
void shellSort(int shell[]);
void random();
int main()
{
random();//产生随机数
system("pause");
return 0;
}
void random()
{
int shell[8];
srand( (unsigned)time( NULL ) );
for(int i = 0; i < P;i++ )
shell[i] = rand()%100+1 ;
printf("初始数据(0--100随机数):\n");
for(int i=0;i<8;i++)
printf("shell[%d] = %d\n",i,shell[i]);
shellSort(shell);//希尔排序
return ;
}
void shellSort(int shell[])
{
for(int gap = 4;gap >0; gap/=2)
for(int i = 0;i <gap;i++) {
for(int j=i+gap;j<8;j+=gap)
if(shell[j] < shell[j-gap]) {
int temp = shell[j];
int k = j-gap;
while(k>=0 &&shell[k] >temp) {
shell[k+gap]=shell[k];
k-=gap;
}
shell[k+gap] =temp;
}
}
printf("\n\n希尔排序后:\n");
for(int m=0;m<8;m++)
printf("shell[%d]= %d\n",m,shell[m]);
return;
}
- js版
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
function shellSort(nums){//希尔排序
var gaps=[5,3,1];//定义间隔区间
for(var g=0;g<gaps.length;g++){//一个一个间隔值开始
for(var i=gaps[g];i<nums.length;i++){//以间隔值遍历
var temp=nums[i];//选中元素
for(var j=i;j>=gaps[g]&&nums[j-gaps[g]]>temp;j-=gaps[g]){//如果前面一个大于后面一个
nums[j]=nums[j-gaps[g]];//后移
}
nums[j]=temp;//填补
}
}
}
function show(nums){//显示数组
for(var i=0;i<nums.length;i++){
document.write(nums[i]+' ');
}
document.write('<br>');
}
var nums=[18,8,15,9,5,3,8,16];
show(nums);//18,8,15,9,5,3,8,16
shellSort(nums);//希尔排序
show(nums);
</script>
</body>
</html>
转载注明出处,谢谢!by 热血大桃子
网友评论