希尔排序
一、基本概念
希尔排序是插入排序的一种,又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。
二、基本原理
希尔排序是把记录按下标的一定量分组,在直接插入排序算法的基本原理的基础上进行改进排序;
随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个数组恰被分成一组,算法便终止。
三、实现步骤
1. 对整个数组进行分组,即gap = len / 2; 或者 gap = len >> 1;
2. 进行改进的插入排序
四、代码实现
void shell_sort(int arr[], int len) { // 进行分组
int gap = len >> 1; for (; gap > 0; gap >>= 1) { // 每次分组进行排序的趟数 for (int i = gap; i < len; ++i) { int tmp = arr[i]; int j = i - gap; // 每次间隔gap个位置进行扫描
// 与插入排序相比,这里记录元素下标的方式发生了一些改变,但本质是一样的 for (; j >= 0 && arr[j] > tmp; j -= gap) { arr[j + gap] = arr[j]; } // 直接进行插入 arr[j + gap] = tmp; } } }
参考博客链接:https://www.cnblogs.com/chengxiao/p/6104371.html