排序算法---希尔排序

希尔排序

一、基本概念

  希尔排序是插入排序的一种,又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。

二、基本原理

  希尔排序是把记录按下标的一定量分组,在直接插入排序算法的基本原理的基础上进行改进排序;

  随着增量逐渐减少,每组包含的关键词越来越多,当增量减至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

posted @ 2021-02-20 10:31  冲锋的蜗牛  阅读(289)  评论(0编辑  收藏  举报