[数据结构]二分插入排序
2015-12-01 21:19
561 查看
二分插入排序是对二分查找和插入排序的一个结合,插入操作时通过二分查找找到要插入的位置.
[code]#include <stdio.h> // 打印数组a void printArr(int a[],int n){ for (int i = 0; i < n; ++i) { printf("%d\t",a[i]); } printf("\n"); } void ModInsertSort(int a[],int n){ int i,j,temp,left,right,mid; for ( i = 1; i < n; ++i) { left=0; temp=a[i]; right=i-1; while(left<=right){ mid=(left+right)/2; if(a[mid]>temp){ right=mid-1; }else{ left=mid+1; } } for ( j = i-1; j >right;j--) a[j+1]=a[j]; a[right+1]=temp; } } int main(){ int a1[]={10,111,22,31,14,57,46,89,39}; ModInsertSort(a1,9); printArr(a1,9); } 输出结果: yaopans-MacBook-Pro:algorithm yaopan$ ./a.out 10 14 22 31 39 46 57 89 111
J***A描述
[code]public class BinInserSort { //二分插入排序 public static void ModInsertSort(int a[]){ int i,j,right,left,mid,temp; for (i =1; i < a.length; ++i) { temp=a[i]; left=0; right=i-1; while(left<=right){ mid=(left+right)/2; if(a[mid]>temp){ right=mid-1; }else{ left=mid+1; } } for(j=i-1;j>right;j--){ a[j+1]=a[j]; } a[right+1]=temp; } } public static void printArry(int[] a){ for (int i = 0; i < a.length; i++) { System.out.print(a[i]+"\t"); } System.out.println("\n"); } public static void main(String[] args) { int a[]={1,2,34,24,5,6,7,8,77,90,37,19,20}; System.out.println("排序前:"); printArry(a); ModInsertSort(a); System.out.println("排序后:"); printArry(a); } } 排序前: 1 2 34 24 5 6 7 8 77 90 37 19 20 排序后: 1 2 5 6 7 8 19 20 24 34 37 77 90
相关文章推荐
- 数据结构中内部排序总结
- 数据结构(Java)——堆的应用
- 数据结构-- 向量--插值查找
- 冒泡排序
- 数据结构。顺序表
- 数据结构中的排序
- bzoj 2120 数颜色 树状数组套平衡树
- 最近邻算法和向量模型——第二部分——算法和数据结构
- 【数据结构】求最小生成树的权值之和——Prim算法
- 数据结构与算法-----单向线性链表(逆转和反向打印)
- 数据结构与算法-----堆栈-使用链表(链式结构)实现
- 网络设备驱动程序数据结构
- Linux USB驱动数据结构
- [数据结构]合并有序数组
- 数据结构实践—— 英文单词的基数排序
- 数据结构---线段树
- 数据结构实践——归并排序算法的改进
- 数据结构C++语言描述专题系列 (二) 栈
- 数据结构C++语言描述专题系列 (一) 绪论
- 【高级数据结构】[SPOJ QTREE]树链剖分/动态树各一模板