第九天、希尔排序
【摘要】 用希尔排序法对一组数据由小到大进行排序,数据分别为69、56、12、136、3、55、46、99、88、25。 希尔排序的全过程如下: 代码实现:
/*第九天、希尔排序*/
#include <stdio.h>
#include <stdlib.h>
/******************...
用希尔排序法对一组数据由小到大进行排序,数据分别为69、56、12、136、3、55、46、99、88、25。
希尔排序的全过程如下:
代码实现:
/*第九天、希尔排序*/
#include <stdio.h>
#include <stdlib.h>
/****************************************************************************************
*希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效 *
*的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 *
*希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少 *
*每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 *
*****************************************************************************************/
/*******************************************
*函数名称:Shsort
*参数说明:pDataArray 无序数组指针
* iDataNum 无序数据个数
*说明: 希尔排序
********************************************/
void Shsort(int* pDataArray,int iDateNumn)
{
int i,j,d;
d = iDateNumn / 2; /*确定固定增量值,设为数组长度的一半*/
while(d >= 1) /*增量等于1退出循环*/
{
for(i = d;i < iDateNumn;i++) /*数组下标从d开始进行直接插入排序*/
{ /*也就是数组的第d+1个元素*/
int temp = pDataArray[i]; /*设置监视哨,元素最右边的位置*/
j = i - d; /*确定要进行比较的元素的最左边位置*/
while((j >= 0) && (temp < pDataArray[j])) /*从后向前,找到比其小的数的位置*/
{
pDataArray[j + d] = pDataArray[j]; /*数据右移*/
j -= d; /*向左移动d个位置*/
}
if (j != i - d) /*存在比其小的数*/
pDataArray[j + d] = temp; /*在确定的位置插入pDataArray[i]*/
}
d = d / 2;
}
}
/*******************************************
*函数名称:main
*参数说明:无
*说明: 主函数
********************************************/
void main(void)
{
int pDataArray[10],i;
printf("请输入10个数据:\n");
for(i = 0;i < 10;i++)
scanf("%d",&pDataArray[i]);
Shsort(pDataArray,10);
printf("排序后的顺序是:\n");
for(i = 0;i < 10;i++)
printf("%5d",pDataArray[i]);
printf("\n");
system("pause");
}
结果显示:
文章来源: jackcui.blog.csdn.net,作者:Jack-Cui,版权归原作者所有,如需转载,请联系作者。
原文链接:jackcui.blog.csdn.net/article/details/50953766
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)