我理解的希尔排序

来源:互联网 发布:买到淘宝假货怎么投诉 编辑:程序博客网 时间:2024/05/24 05:57

待排数组:a= {49,38,65,97,26,13,27,49,55,04};

希尔排序是插入排序的一种,可以理解为变步长的插入排序,我觉着更确切的说插入排序是希尔排序的最后一步,即:将数组分成一组的情况。希尔算法大体如下:a.length/2,分组得到步长,然后对分组数据进行插入排序,直到步长为0。

我利用vs2008编写了一个程序实现希尔排序,程序如下:

// InsertSort.c.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include "stdio.h"




void ShellInsert(int A[],const int num,int step,int n ){
int  temp =0;int j=0;
for(int i = n;i+step <num;i += step)
{
temp = A[i+step];//待排的元素
for( j = i;j >= n ; j -= step){
if(temp >= A[j]){
A[j+step] = temp;
break;
}
else{
A[j+step] = A[j];
}
}
if(j < n)
A[n] = temp;

}
}


void Group(int A[], const int num){
//int num = sizeof(A)/sizeof(int);
static int i=0;
int step = num;
while(step=(step)/2){
i = 0;
for(int j =0;j < num ;j++)//num :表示分了几组
{
ShellInsert(A,num,step,i);//i:表示从那开始插入
i++;
}
for(int i=0;i<num;i++)
printf("%d\t",A[i]);
printf("\n");
}
}


int _tmain(int argc, _TCHAR* argv[])
{
int a[] = {49,38,65,97,26,13,27,49,55};
int num = sizeof(a)/sizeof(int);
printf("%ld\n",num);
Group(a,num);


getchar();
return 0;
}

0 0
原创粉丝点击