二分法插入排序(Binary Sort)
来源:互联网 发布:软件出售 编辑:程序博客网 时间:2024/06/07 07:25
/** * 3.2 二分法插入排序: 按二分法找到合适的位置,可以减少比较的次数. * * EX: int[] nums={8,1,4,2,23,10}; < * * 8,1,4,2,23,10 * | * 1,8,4,2,23,10 * | * 1,4,8,2,23,10 * | * 1,2,4,8,23,10 * | * 1,2,4,8,23,10 * | * 1,2,4,8,10,23 * * 二分法插入排序是稳定的. * 二分插入排序的比较次数与待排序记录的初始状态无关,仅依赖于记录的个数. * 当n较大时,比直接插入排序的最大比较次数少得多,但大于直接插入排序的最小比较次数. * 算法的移动次数与直接插入排序算法的相同,最坏的情况为n2/2,最好的情况为n. * 平均时间复杂度为O(n2). * */ public static void binarySort(int[] nums) { int half,insert; for(int i=1;i<nums.length;i++){ half=i/2; insert=nums[i]; if(nums[i]==nums[half]){ for(int j=i-1;j>half;j--){ nums[j+1]=nums[j]; } nums[half+1]=insert; }else if(nums[i]<nums[half]){ for(int j=i-1;j>half;j--){ nums[j+1]=nums[j]; } for(int j=half;j>=0;j--){ nums[j+1]=nums[j]; if(j==0) nums[0]=insert; else if(insert>=nums[j-1]){ nums[j]=insert; break; } } }else if((nums[i]>nums[half])&&(nums[i]<nums[i-1])){ for(int j=i-1;j>=half+1;j--){ nums[j+1]=nums[j]; if(insert>=nums[j-1]){ nums[j]=insert; break; } } } } }
0 0
- 二分法插入排序(Binary Sort)
- 折半插入排序(binary insertion sort)
- 折半插入排序(Binary Insert Sort)
- 插入排序二分法插入排序
- 二分法插入排序
- 二分法插入排序
- 二分法插入排序代码
- 二分法插入排序
- 二分法插入排序
- 二分法插入排序
- 二分法插入排序
- 二分法插入排序
- 二分法插入排序
- 二分法插入排序
- 二分法插入排序
- 排序算法 -- 二分法插入排序
- 排序算法:二分法插入排序
- 排序—二分法插入排序
- 191. Number of 1 Bits
- 杭电oj编码2004
- CodeForces 560D Equivalent Strings【递归+贪心】
- 学习Cocos的第一步,认识Cocos中的Ref类
- Linux下udev和mdev详解
- 二分法插入排序(Binary Sort)
- 希尔排序(Shell Sort)
- 归并排序(Merge Sort)
- 杭电oj编码2003
- c++函数的几种关系
- 杭电oj编码2002
- 基数排序(Radix)
- 杭电oj编码2001
- 用window.name来解决不同网页间的数据通信