排序算法之 —— 希尔排序(四)

来源:互联网 发布:ios10 连接网络 编辑:程序博客网 时间:2024/05/21 12:37

希尔排序算法
实质就是分组插入排序,也就是缩小增量排序
是插入排序的升级版

基本思想:将待排元素序列分为若干个子序列(由相隔
”增量gap“的元素组成),分别进行直接插入
排序,然后依次减小增量,再进行排序

#include<iostream>#include<stdio.h>#include<stdlib.h>#define   len   10void Show(int str[],int length);void Shell_sort(int str[],int length);using namespace std;void Show(int str[],int length){    int i;    for(i = 0;i <length ;i++)    {        printf("  %d",str[i]);    }}void Shell_sort(int str[],int length)    {        int gap;        int i;        int j;        for(gap = length/2;gap > 0;gap /= 2)        {             for(i = gap ; i < length ; i++ )             {                   for(j = i - gap;j>= 0 && str[j] > str[j + gap];j -= gap)                   {                       int temp ;                       temp = str[j];                       str[j]  = str[j + gap];                       str[j+ gap] = temp;                   }             }        }    }int main(){    int str[len];    int i ;    for(i  = 0; i < len; i++)    {        str[i]  = rand()%100;    }    printf("排序前:\n");    Show(str,len);    printf("\n");    printf("排序后:\n");    Shell_sort(str,len);    Show(str,len);    return 0;}运行结果:排序前:  41  67  34  0  69  24  78  58  62  64排序后:  0  24  34  41  58  62  64  67  69  78Press any key to continue

程序解读:
41 67 34 0 69 24 78 58 62 64

第一次: gap = 10/ 2 = 5

41 67 34 0 69 24 78 58 62 64
24 41
67 78
34 58
0 62
64 69
整理后:
24 67 34 0 64 41 78 58 62 69

第二次: gap = 5 /2 = 2

24 67 34 0 64 41 78 58 62 69
24 34 62 64 78
0 41 58 67 69
整理后:

24 0 34 41 62 58 64 78 69
第三次 : gap = 2 /2 = 1

0 24 34 41 58 62 64 69 78

0 0
原创粉丝点击