<菜鸟学算法-A排序(shell排序)>

来源:互联网 发布:软件融合器 编辑:程序博客网 时间:2024/05/15 23:45

希尔排序是一种插入排序算法,它出自D.L.Shell,因此而得名。Shell排序又称作缩小增量排序。

先取一个小于n的整数k作为第一个增量,把文件的全部记录分成k1个组。所有距离为k1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量k2<k1重复上述的分组和排序,直至所取的增量kt=1(kt<kt-1<;…<k2<k1),即所有记录放在同一组中进行直接插入排序为止.

/* ============================================================================ Name        : shell_sort.c Author      : braveboyny Version     : Copyright   : Your copyright notice Description : shell sort in C, Ansi-style ============================================================================ */#include <stdio.h>#include <stdlib.h>void shell_sort(int array[],int n){inti,j,k;int temp;k=n;do{k=k/2;   /*设定分组的大小,即下标相差k的数属于一组*/for(i=k;i<n;i++){if(array[i]>array[i-k]) /*这是提高效率的关键;若待插入的数                        *已大于组中最大的数就不用做任何操作                         直接进入下一组*/continue;j=i-k;      /*下面是标准的插入排序,  *把k换成1是不是有种很熟系的感觉*/temp=array[i];while(j>=0&&array[j]>temp){array[j+k]=array[j];j=j-k;}array[j+k]=temp;}}while(k);}int main(void) {int array[10]={8,6,3,2,5,4,7,1,9,0};int i;shell_sort(array,10);for(i=0;i<10;i++)printf("%d\t",array[i]);printf("\n");return 0;}//out:0 1 2 3 4 5 6 7 8 9


0 0
原创粉丝点击