希尔排序是对插入排序的优化,算法先将整个数组序列分割成若干子序列,并分别进行直接插入排序,直到整个序列基本有序时,再对全体记录进行一次直接插入排序。我们来看一下它的实现代码:
#include <stdio.h> #define SIZE (10) //子表插入排序 void shell_insert(int array[], int size, int i, int m) { //子表循环 for (int j = i + m; j < size; j += m) { //找到插入位置 if (array[j] < array[j - m]) { //互换 int t = array[j]; int k = j - m; //后移 for (; k >= 0 && array[k] > t; k -= m) { array[k + m] = array[k]; } array[k + m] = t; } } } //希尔排序 void shell_sort(int *array, int size) { //半步长递增 for (int i = size / 2; i > 0; i /= 2) { //执行size / 2趟子表插入排序 for (int j = 0; j < i; j++) { shell_insert(array, size, j, i); } } } //显示数组 void display(int *array, int size) { for (int i = 0; i < size; i++) { printf("%d ", array[i]); } printf("\n"); } int main(int argc, char **args) { int array[SIZE] = { 9, 3, 1, 2, 5, 8, 7, 0, 6, 4 }; //显示数组 display(array, SIZE); //插入排序 shell_sort(array, SIZE); //显示数组 display(array, SIZE); return 0; }
运行结果:
9 3 1 2 5 8 7 0 6 4 0 1 2 3 4 5 6 7 8 9
本例代码:
code path chapter.08/e.g.8.2/ https https://github.com/magicworldos/datastructure.git git git@github.com:magicworldos/datastructure.git subverion https://github.com/magicworldos/datastructure
Copyright © 2015-2023 问渠网 辽ICP备15013245号