常见排序之希尔排序

Posted muzixiaofeng

tags:

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

#include <stdio.h> 

#include <stdlib.h> 

void ShellSort(int a[], int length) 

    int increment; 

    int i,j; 

    int temp; 

    for(increment = length/2; increment > 0; increment /= 2) //用来控制步长,最后递减到1 

    { 

        // i从第step开始排列,应为插入排序的第一个元素 

        // 可以先不动,从第二个开始排序 

        for(i = increment; i < length; i++) 

        { 

            temp = a[i]; 

            for(j = i - increment; j >= 0 && temp < a[j]; j -= increment) 

            { 

                a[j + increment] = a[j]; 

            } 

            a[j + increment] = temp; //将第一个位置填上 

        } 

    } 

 

int main() 

    printf("==============希尔排序=============== "); 

    int i, j; 

    int a[] = {5, 18, 151, 138, 160, 63, 174, 169, 79, 200};     

    printf("待排序的序列是: "); 

    for(i = 0; i < 10; i++) 

    { 

        printf("%d ", a[i]); 

    } 

    ShellSort(a, 10); 

    printf(" 排序后的序列是: "); 

    for(j = 0; j < 10; j++) 

    { 

        printf("%d ", a[j]); 

    } 

    printf(" "); 

    return 0; 

 

方法二:

#include<stdio.h>

#include<stdlib.h>

 

 

void ShellSort(int *array,int length)

{

      int i,j,temp,increment;

 

      increment = length;

 

      do

      {

           increment /= 2;

 

           for(i = increment; i < length; i++)

           {

                

                 //if(array[i] < array[i-increment])

                 {

                      temp = array[i];

 

                      for(j = i-increment; j >= 0 && array[j] > temp; j -= increment)

                      {

                            array[j+increment] = array[j];

                      }

 

                      array[j+increment] = temp;

                 }

                     

                

           }

 

      }

      while(increment > 0);

}

 

int main(void)

{

      int i;

 

      int Array[5] = {4,2,1,5,3};

 

     

      ShellSort(Array,5);

 

      for(i = 0; i < 5; i++)

      {

           printf("%d ",Array[i]);

      }

      return 0;

}

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

常见排序算法-希尔排序

常见排序算法——希尔排序

算法之常见的排序算法

数据结构(14)---排序之插入排序(直接插入排序, 希尔排序)和选择排序(直接选择排序, 堆排序)

经典排序之希尔排序

常见排序算法-----希尔排序