插入排序
2015-06-09 21:44
197 查看
一、基本思想
通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。//查找数值iData在长度为iLen的pDataArray数组中的插入位置 int FindInsertIndex(int *pDataArray, int iLen, int iData) { int iBegin = 0; int iEnd = iLen - 1; int index = -1; //记录插入位置 while (iBegin <= iEnd) { index = (iBegin + iEnd) / 2; if (pDataArray[index] > iData) iEnd = index - 1; else iBegin = index + 1; } if (pDataArray[index] <= iData) index++; return index; } /******************************************************** *函数名称:BinaryInsertSort *参数说明:pDataArray 无序数组; * iDataNum为无序数据个数 *说明: 二分查找插入排序 *********************************************************/ void BinaryInsertSort(int* pDataArray, int iDataNum) { for (int i = 1; i < iDataNum; i++) //从第2个数据开始插入 { int index = FindInsertIndex(pDataArray, i, pDataArray[i]); //二分寻找插入的位置 if (i != index) //插入位置不为i,才挪动、插入 { int j = i; int temp = pDataArray[i]; while (j > index) //挪动位置 { pDataArray[j] = pDataArray[j-1]; j--; } pDataArray[j] = temp; //插入 } } }
View Code
相关文章推荐
- 变量自增
- C++归并算法
- Linux安全之SYN攻击原理及处理
- ubuntu 下按照官网教程安装 mongodb和c++ driver
- motto
- Android快速开发之appBase——(2).万能的Adapter
- Android Studio配置真机调试
- 黑客帝国屏幕保护设置
- C# 集合扩展快速排序算法
- css鼠标手型cursor
- 第七章习题汇总
- 三星Note3 N900解决WIFI无法打开、打开缓慢、卡死、wifi密码重启不能保存等问题
- 找工作必备知识
- spark学习4 yarn运行
- 解决MyEclipse当确认所有配置都配好后还是无法达到目的的问题
- 某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C/C++代码求出这两个单身整数。 要求: 时间复杂度o(n), 空间复杂度o(1)------某公司招聘试题
- 修改Active Directory域控制器IP地址
- Android基础系列-----------OpenGL ES(一)
- gem5配置
- android AudioManager 类详解