(经典)直接插入排序based on 二分查找
#include<stdio.h>
// 查找第一个大于key的元素,成功则返回该元素的下标,否则返回数组末元素的下一位
int findFirstLarger(int A[],int n, int key)
{
int left = ;
int right = n-; // 这里必须是 <=
while (left <= right) {
int mid = (left + right) / ;
if (A[mid] > key) {
right = mid - ;
}
else {
left = mid + ;
}
}
return left;
} void insert(int a[],int n)
{ int flag,temp,j,i,k; //3个元素要进行2趟排序
for(j=;j<n;j++){ //对位序1,2,3....n分别进行插入,bug隐藏在这,应该是1,2,3,n-1 //对[0,j-1]进行插入排序,将j指向的元素插入
flag = findFirstLarger(a,j,a[j]); if(flag ==j) continue ;
temp = a[j]; //保存将要插入的元素
//将i(flag待插入的那个位置)之后的元素后移动一位
for(k=j;k>flag;k--){
a[k]=a[k-];
}
//将temp插入到i这个位置
a[flag] = temp; } } int main()
{ int tt;
int a[] = {,,,,,,,,,,,-,,};
insert(a,);
for(tt=;tt<;tt++){
printf("%d\n",a[tt]);
}
return ;
}
典型错误:
//顺序查找第一个比key大的元素
int position1(int a[],int n,int key)//传入有序表和要查找的元素位置
{
int i;
for(i=;i<n;i++){
if(a[i]>key) return i; //这样做就不行了
}
return i+;
} //这个才是正确的
int position(int a[],int n,int key)//传入有序表和要查找的元素位置
{
int i,index=-;
for(i=;i<n;i++){
if(a[i]>key) index = i ; break; //从前往后是大于符号
}
if(index == -)
return n;
else return index;
}
(经典)直接插入排序based on 二分查找的更多相关文章
- 第四篇、C_快速、冒泡、选择、插入排序、二分查找排序、归并、堆排序
1.快速排序 实现: 1.取中间一个数作为支点 2.分别在支点的左右两边进行查找,如果左边查找到比支点大,右边查找到比支点小,就交换位置,如此循环,比支点小的数就排在了左边,比支点大的就排在右边 3. ...
- java 冒泡排序 二分查找 选择排序 插入排序
下面这个程序是先定义一个整型数组,然后将其中的元素反序赋值,再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数,返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值,-2表示这 ...
- Leetcode 981. Time Based Key-Value Store(二分查找)
题目来源:https://leetcode.com/problems/time-based-key-value-store/description/ 标记难度:Medium 提交次数:1/1 代码效率 ...
- Java基础知识强化60:经典查找之二分查找
1. 二分查找 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表. 比较 ...
- 经典算法二分查找循环实现Java版
二分查找 定义 二分查找(Binary Search)又称折半查找,它是一种效率较高的查找方法. 要求 (1)必须采用顺序存储结构 (2)必须按关键字大小有序排列 查找思路 首先将给定值K,与表中中间 ...
- (经典) K&R的名著<<C程序设计语言>>二分查找
#include<stdio.h> //查找成功则返回所在下标否则返回-1 int binsearch(int A[], int n,int a) { int low, high, mid ...
- JAVA源码走读(二)二分查找与Arrays类
给数组赋值:通过fill方法. 对数组排序:通过sort方法,按升序.比较数组:通过equals方法比较数组中元素值是否相等.查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找 ...
- js基本算法:冒泡排序,二分查找
知识扩充: 时间复杂度:算法的时间复杂度是一个函数,描述了算法的运行时间.时间复杂度越低,效率越高. 自我理解:一个算法,运行了几次时间复杂度就为多少,如运行了n次,则时间复杂度为O(n). 1.冒泡 ...
- 二分查找实现(Jon Bentley:90%程序员无法正确实现)
二分查找实现(Jon Bentley:90%程序员无法正确实现)作者:July出处:结构之法算法之道引言Jon Bentley:90%以上的程序员无法正确无误的写出二分查找代码.也许很多人都早已听说过 ...
随机推荐
- 随机生成气泡碰撞(原生js)
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>随 ...
- appium问题解决
ppium 1.4.16 版本 测试安卓7.0 提示AppiumSettings.Unlock.AndroidInputManager 安装 修改 C:\Program Files (x86)\App ...
- 去掉每行最后n个字符
awk '{sub(/.{n}$/,"")}1' nation.tbl > nation.tbl2 把n替换成具体长度
- BootStrap一页通(样式+组件+插件)
bootstrap是一种前端框架,实现美观的页面效果.使用BootStrap的前期工作(注意顺序): <!DOCTYPT html>:因为Bootstrap用到了h5的特性,所以需要此步. ...
- Mindoc搭建流程
1,安装MySql 2,官网下载:https://github.com/lifei6671/mindoc/releases mindoc_windows_amd64.7z 3,如果下载的压缩包中不存在 ...
- firefox_flash_install_on_kali
手动安装firefox的flash的步骤 1> 下载flash的tar.gz安装包 firefox http://get2.adobe.com/cn/flashplayer/otherversi ...
- Git命令速查表【转】
本文转载自:http://www.cnblogs.com/kenshinobiy/p/4543976.html 一. Git 常用命令速查 git branch 查看本地所有分支git status ...
- 根据Bootstrap的Modal开发的提示框
代码: (function ($) { $(function () { var Modal = function () { var htmlContent = "<div id=\&q ...
- [PyTorch]论文pytorch复现中遇到的BUG
目录 1. zip argument #1 must support iteration 2. torch.nn.DataParallel 3. model.state_dict() 1. zip a ...
- ImportError: cannot import name 'izip & TypeError: 'float' object cannot be interpreted as an integer
ImportError: cannot import name 'izip' 参考:https://codereview.stackexchange.com/questions/26271/impor ...