/*
* 此程序用于实现希尔排序
* 作者:zhy
* 时间:2021/7/21
*/
#include <stdio.h>
#include <stdlib.h>
// 对同一组的元素进行插入排序
// 参数 arr 需要排序的数组首地址
// 参数 span 本次排序各元素位置的跨度
// 参数 len 需要排序的数组长度
void GroupInsertSort(int *arr,int span,int len);
// 希尔排序函数
// 参数 arr 需要排序的数组首地址
// 参数 len 需要排序的数组长度
void HillSort(int *arr,int len);
int main (int argc,char *argv[])
{
int arr[]={44,3,38,5,47,15,36,26,27,2,46,4,19,50,48};
int len=sizeof(arr)/sizeof(int);
int yy; for (yy=0;yy<len;yy++) printf("%2d ",arr[yy]); printf("\n");
HillSort(arr,len); // 调用插入排序函数对数组排序。
// 显示排序结果。
for (yy=0;yy<len;yy++) printf("%2d ",arr[yy]); printf("\n");
return 0;
}
void GroupInsertSort(int *arr,int span,int len)
{
int ii; // 正在排序的元素下标
int jj; // 插入位置下标
int temp; // 插入元素暂存位
for (ii = span; ii < len;ii += span)
{
temp = arr[ii];
for (jj = ii - span;jj >= 0;jj -= span)
{
if ( temp > arr[jj] ) break;
arr[jj + span] = arr[jj];
}
arr[jj + span] = temp;
}
}
void HillSort(int *arr,int len)
{
int span = len/2; // 分组跨度
while ((span /=2) != 0)
{
for (int ii = 0; ii < span;ii++)
{
GroupInsertSort(arr+ii,span,len);
int yy; for (yy=0;yy<len;yy++) printf("%2d ",arr[yy]); printf("\n");
}
}
}
实现希尔排序
最新推荐文章于 2022-03-26 08:27:05 发布