C++插入排序 包括折半插入排序法代码,在直接插入排序,数组data用于存放待排序元素,n为待排序元素个数,同时还包括了对data数组中的元素进行希尔排序,n为该数组大小等:
代码如下 | 复制代码 |
#include using namespace std; #include "sort.h" // 直接插入排序,数组data用于存放待排序元素,n为待排序元素个数 template void InsertSort(ElemType data[], int n) { ElemType tmp; int i, j; for (i = 1; i < n; i++){ if ( data[i] > data[i - 1]) continue; tmp = data[i]; // 保存待插入的元素 data[i] = data[i - 1]; for ( j = i - 1; j > 0 && data[j - 1] > tmp;j--) data[j] = data[j - 1]; // 元素后移 data[j] = tmp; // 插入到正确位置 } } // 折半插入排序 template void BInsertSort(ElemType data[], int n) { ElemType tmp; int i, j, mid, low, high; for (i = 1; i < n; i++){ tmp = data[i]; // 保存待插入的元素 low = 0; high = i-1; while (low <= high){ // 在data[low..high]中折半查找有序插入的位置 mid = (low + high) / 2; // 折半 if( tmp < data[mid]) high = --mid; // 插入点在低半区 else low = ++mid; // 插入点在高半区 } for(j = i - 1; j >= low; j--) data[j + 1] = data[j]; // 元素后移 data[low] = tmp; // 插入到正确位置 } } // 对data数组中的元素进行希尔排序,n为该数组大小 // increments为增量序列,incrementsLength为增量序列的大小 template void ShellSort(ElemType data[], int increments[], int n, int incrementsLength) { int i, j, k; ElemType tmp; for ( k = 0; k < incrementsLength; k++){ // 进行以increments[k]为增量的排序 for ( i = increments[k]; i < n; i++){ tmp = data[i]; for ( j = i; j >= increments[k]; j -= increments[k]){ if ( tmp >= data[j - increments[k]]) break; data[j] = data[j - increments[k]]; } data[j] = tmp; } } } |
补充一个
1.直接插入排序;2.折半插入排序;3.Shell排序;4.冒泡排序;5.快速排序;6.简单选择排序;7.堆排序;8.2-路归并排序;9.2-路归并排序(非递归);10.基数排序等,程序代码如下:
代码如下 | 复制代码 |
#include "sort.h" |