算法和数据结构---排序---插入排序
2012-07-20 23:55
176 查看
直接插入排序
折半插入
希尔排序
int insertsort(int x[],int n) { int i,j,t; for(i=0;i<n;i++) { t=x[i]; for(j=i;j>=0&&x[j-1]>t;j--) { x[j]=x[j-1]; } x[j]=t; } }
折半插入
void BiInsertionSort(SqList &L){ //对顺序表L作折半插入排序 for(i=2; i<=L.length; ++i){ L.r[0] = L.r[i]; low = 1; high = i-1; //查找i记录应该插入的位置,必定是high+1的位置从而high+1位置以后的元素都应该往后移动一个位置,留出一个位置放入L.r[i] while(low <= high){ mid = (low + high)/2; if(LT(L.r[0], L.r[m].key)) high = m - 1; else low = m + 1; } //后移 for(j=i-1; j>=high+1; --j) L.r[j+1] = L.r[j]; //插入元素 L.r[high+1] = L.r[0]; } }
希尔排序
void ShellSort(SqList *L) { int i,j; int increment=L->length; do { increment=increment/3+1; /* 增量序列 */ for(i=increment+1;i<=L->length;i++) { if (L->r[i]<L->r[i-increment]) /* 需将L->r[i]插入有序增量子表 */ { L->r[0]=L->r[i]; /* 暂存在L->r[0] */ for(j=i-increment;j>0 && L->r[0]<L->r[j];j-=increment) L->r[j+increment]=L->r[j]; /* 记录后移,查找插入位置 */ L->r[j+increment]=L->r[0]; /* 插入 */ } } } while(increment>1); }
相关文章推荐
- 数据结构-排序算法之插入排序(直接插入,二分插入,希尔,表插入)
- 【数据结构和算法】排序算法之三:插入排序
- 【数据结构----笔记3】插入排序算法之【直接插入排序】
- 【数据结构----笔记4】插入排序算法之【折半插入排序算法】
- [算法与数据结构] - No.1 直接插入排序
- 数据结构与算法——冒泡排序,选择排序,直接插入排序
- 直接插入排序 - 数据结构和算法90
- 算法与数据结构(四)--插入排序(直接插入排序)
- 【数据结构】算法10.3 插入排序-表插入
- 一步步学习数据结构和算法之直接插入排序效率分析及java实现
- 第16周SHH数据结构-【项目1-验证算法(1)直接插入排序】
- 挖掘算法中的数据结构(一):O(n^2)排序算法之 选择、插入、冒泡、希尔排序 及 优化
- [多图预警详细演示一步一步写算法导论]插入排序
- 第十五周项目四 验证算法——直接插入排序
- 白话经典算法系列之二 直接插入排序的三种实现
- 算法与数据结构基础(二)排序基础2.插入排序
- 数据结构 27 排序 排序-选择 插入 冒泡 希尔 快速归并 6种排序
- java数据结构之插入排序(直接插入排序、折半插入排序、希尔排序)
- OC学习之道:数据结构中几种常见的排序算法:选择排序,插入排序.快速排序
- 【算法】 简单选择排序与直接插入排序