希尔排序-C语言

Posted 霍同学笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了希尔排序-C语言相关的知识,希望对你有一定的参考价值。

#include <stdio.h>void shellsort(int arr[],int length){ int increment= length; int i ,j; do { increment=increment/3+1; for(i=increment;i<=length;i++) { if(arr[i]>arr[i+increment]) { int temp =arr[i]; for(j=i-increment;j>=0 && temp < arr[j];j-=increment) { arr[j+increment]=arr[j]; } arr[j+increment]=temp; } } } while(increment>1);
} int main(){ int arr[9]={1,8,3,99,33,66,88,22,66}; shellsort(arr,9); int i; for(i=0;i<9;i++) { printf(" %d ",arr[i]); } return 0;}
希尔排序是直接插入排序的升级版本,对我来说有2个疑难处。

第一个在22行,为何increment>1而非≥1,我拿代码尝试后发现如果等于1就无线循环,不行。

第二个在14行的内循环里。原来希尔排序是从increment开始逐步递增并不断和之前的那位数值进行比较啊。第14行内循环则是直接插入在希尔排序中的体现,通过arr【j】不断的等差值递减与temp逐一比较,以此来寻找temp的最终位置,并在此过程中不断后移不需要被插入的值。

以上是关于希尔排序-C语言的主要内容,如果未能解决你的问题,请参考以下文章

希尔排序的c语言实现代码

8种面试经典!排序详解--选择,插入,希尔,冒泡,堆排,3种快排,快排非递归,归并,归并非递归,计数(图+C语言代码+时间复杂度)

8种面试经典排序详解--选择,插入,希尔,冒泡,堆排,3种快排及非递归,归并及非递归,计数(图+C语言代码+时间复杂度)

8种面试经典排序详解--选择,插入,希尔,冒泡,堆排,3种快排及非递归,归并及非递归,计数(图+C语言代码+时间复杂度)

八大排序算法C语言过程图解+代码实现(插入,希尔,选择,堆排,冒泡,快排,归并,计数)

C语言 | 希尔排序