【算法】_009_插入排序_二分查找优化
2014-10-01 23:41
316 查看
1、005_sort_insert_b.h
2、005_sort_insert_b.c
/*************************************************************** *版权所有 (C)2014,长沙铁信交通科技有限公司。 * *文件名称:005_sort_insert_b.h *内容摘要:实现插入排序 *其它说明: *当前版本:V1.0 *作 者:伍定湘 *完成日期:2014年9月25日 * *修改记录1: * 修改日期:2014年9月25日 * 版本号:V1.0 * 修改人:伍定湘 * 修改内容:创建 ***************************************************************/ #ifndef _SORT_INSERT_B_H_ //防止头文件被重复引用 #define _SORT_INSERT_B_H_ /************************************************************** 头文件引用 **************************************************************/ #include "typedef.h"//引入内置类型重定义 /************************************************************** 相关宏定义 **************************************************************/ /************************************************************** 相关结构体定义 **************************************************************/ /************************************************************** 本程序中出现的函数的声明 **************************************************************/ void sort_insert_b(INT32 aUnsorted[], const INT32 iArrLen); INT32 search_binary_i(INT32 aSorted[], INT32 iOfffsetEnd, const INT32 iMatch); #endif
2、005_sort_insert_b.c
/*************************************************************** *版权所有 (C)2014,长沙铁信交通科技有限公司。 * *文件名称:005_sort_insert_b.c *内容摘要:实现插入排序 *其它说明: *当前版本:V1.0 *作 者:伍定湘 *完成日期:2014年9月25日 * *修改记录1: * 修改日期:2014年9月25日 * 版本号:V1.0 * 修改人:伍定湘 * 修改内容:创建 ***************************************************************/ /************************************************************** 头文件引用 **************************************************************/ #include "typedef.h"//引入内置类型重定义 #include "005_sort_insert_b.h" #include <stdio.h> /************************************************************** 全局变量定义 **************************************************************/ /************************************************************** 函数实现 **************************************************************/ /********************************************************************** *功能描述:实现插入排序 *输入参数:arr - 尚未排序的数组 * iArrLen - 尚未排序的数组的长度 *输出参数: *返回值: *其它说明: *修改日期 版本号 修改人 修改内容 * --------------------------------------------------------------------- *2014年9月26日 V1.0 伍定湘 创建 ***********************************************************************/ void sort_insert_b(INT32 aUnsorted[], const INT32 iArrLen) { INT32 iOffset = 1;//考虑到部分单片机设备只支持C89标准,变量的声明依照C89标准根式编写 INT32 iOffsetInsert, iTmp; /* 过滤非法数组长度值 */ if (iArrLen < 2) { printf("The array length is too short or illegal.\n"); return; } for (; iOffset < iArrLen; iOffset++) { iTmp = aUnsorted[iOffset];//保存要被插入的箱子的值,产生"空位" iOffsetInsert = search_binary_i(aUnsorted, iOffset, aUnsorted[iOffset]);//在有序元素序列中二分查找插入位置 for (INT32 i = iOffset; i > iOffsetInsert; i--)//插入点后的值整体后移一位 { aUnsorted[i] = aUnsorted[i - 1]; } aUnsorted[iOffsetInsert] = iTmp;//目标值填入空位中 } } /********************************************************************** *功能描述:实现二分查找插入位置 *输入参数:aSorted - 已经排序的数组 * iArrLen - 已经排序的数组的长度 * iMatch - 待匹配的目标值 *输出参数: *返回值:与目标值匹配的插入位置 *其它说明: *修改日期 版本号 修改人 修改内容 * --------------------------------------------------------------------- *2014年9月26日 V1.0 伍定湘 创建 ***********************************************************************/ INT32 search_binary_i(INT32 aSorted[], INT32 iOfffsetEnd, const INT32 iMatch) { INT32 iOfffsetBegin = 0; INT32 iOfffset; /* 二分查找,使得下标iOfffsetEnd与iOfffsetBegin相邻时结束 */ while (iOfffsetEnd - iOfffsetBegin > 1) { iOfffset = (iOfffsetBegin + iOfffsetEnd) / 2; if (iMatch < aSorted[iOfffset]) { iOfffsetEnd = iOfffset; } else { iOfffsetBegin = iOfffset; } } /* 由于iOfffset恒大于0 , 必须单独检查iOfffsetEnd == 1 时的情况, 以防aSorted[0]无法移动 */ if (iOfffsetEnd == 1) { return(iMatch > aSorted[0] ? 1 : 0); } return(iOfffsetEnd); }
相关文章推荐
- C#泛型版的超级优化的快速排序算法和插入排序、二分查找算法
- 优化的二分查找插入算法
- 基于二分查找的抽签游戏算法的优化
- 集训第四周(高效算法设计)N题 (二分查找优化题)
- JavaShowAlgorithm-优化的插入排序带着二分查找
- 插入排序优化:简单插入排序->二分查找插入排序->二路插入排序->shell插入排序
- 优化的直接插入排序(二分查找插入排序,希尔排序)
- 数据结构--加入二分查找的插入排序(优化)
- 集训第四周(高效算法设计)B题 (二分查找优化题)
- 算法---冒泡排序,快速排序,二分查找(折半查找),选择排序,插入排序
- 优化的直接插入排序(二分查找插入排序,希尔排序)
- 优化的直接插入排序(二分查找插入排序,希尔排序)
- 集训第四周(高效算法设计)C题 (二分查找优化题)
- [整理]插入排序以及二分查找排序
- 二分查找算法
- 实用算法实现-第 5 篇 二分查找树
- KMP 算法并非字符串查找的优化 [转]
- 二分查找及其变形算法
- 【算法分析】查找算法:二分查找、顺序查找