插入排序及插入排序改进
2016-11-07 00:03
489 查看
插入排序,在算法导论里面的介绍对数组 A[ ] = { 5, 2, 4,6,1,3 } 进行插入排序,排序的过程如下:
C语言代码
参考:
[1] 算法导论
排序过程
a-->b-->c-->d-->e-->f非降序插入排序
伪代码for j = 2 to A.length key = A[j] // Insert A[j] into the sorted sequence A[1...j-1](这里是注释) i = j - 1 while i > 0 and A[i] > key A[i + 1] = A[i] i = i - 1 A[i + 1] = key
C语言代码
int insert_sort(int A[], int size) { int i, j, key; if (NULL == A || size <=1 ){ printf("File:[%s] Line:[%s] illegal array\n", __FILE__, __LINE__); return -1; } for(j=1; j<size; ++j){ key = A[j]; // inser A[j] to the sorted sequence A[1...j-1] i = j - 1; while (i >= 0 && A[i] > key){ A[i+1] = A[i]; i = i - 1; } A[i+1] = key; } return 0; }
非升序插入排序伪代码
for j = 2 to A.length key = A[j] // Insert A[j] into the sorted sequence A[1...j-1](这里是注释) i = j - 1 while i > 0 and A[i] < key A[i + 1] = A[i] i = i - 1 A[i + 1] = key
插入排序改进
二分插入排序
伪代码for j = 2 to A.length key = A[j] // Insert A[j] into the sorted sequence A[1...j-1] i = j - 1 if A[i] > key k = binary_search() for i to k A[i + 1] = A[i] i = i - 1 A[i + 1] = keyC语言代码
#define INT_AVERAGE(A,B) ((A)&(B))+(((A)^(B))>>1) int insert_sort(int A[], int size) { int i, j, key; int pos, k; if (NULL == A || size <=1 ){ printf("File:[%s] Line:[%s] illegal array\n", __FILE__, __LINE__); return -1; } for(j=1; j<size; ++j){ key = A[j]; i = j - 1; if (A[i] > key){ pos = interative_binary_search(A, key, 0, i); for (; i>=pos; --i) A[i+1] = A[i]; } A[i+1] = key; } return 0; } int interative_binary_search(int A[], int v, int low, int high) { int mid; while (low < high){ mid = INT_AVERAGE(low, high); if (v > A[mid]) low = mid + 1; else high = mid - 1; } return low; }
参考:
[1] 算法导论
相关文章推荐
- 排序(二)插入排序、插入改进——二分插入排序、插入改进——希尔排序
- 2路插入排序-插入排序的改进
- 插入排序和插入排序的改进
- 排序:插入排序以及其改进:二分法插入
- 插入排序(直接插入排序,折半插入排序,2路插入排序)
- 5.插入排序——希尔插入排序
- 插入排序的改进算法-希尔排序
- 插入排序(直接插入排序--折半插入排序--谢尔排序)
- 插入排序--直接插入排序
- 插入排序—直接插入排序(Straight Insertion Sort)
- 算法-排序-插入排序(直接插入和希尔排序)
- java排序之插入排序(直接插入排序和希尔排序)
- 排序算法(插入排序)——直接插入排序
- 算法学习之排序算法:插入排序(直接插入排序、折半插入排序、2-路插入排序)
- 插入排序优化:简单插入排序->二分查找插入排序->二路插入排序->shell插入排序
- 直接插入排序、二分插入排序、希尔排序、冒泡排序与简单选择排序
- 排序算法—插入排序之直接插入排序
- 插入排序(直接插入排序,折半插入排序,2路插入排序,希尔排序)
- 插入排序、半分插入排序、希尔排序
- 插入排序之2路插入排序