常见排序之希尔排序

#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("==============希尔排序===============\n\n"); 

    int i, j; 

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

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

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

    { 

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

    } 

    ShellSort(a, 10); 

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

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

    { 

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

    } 

    printf("\n"); 

    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;

}

猜你喜欢

转载自www.cnblogs.com/muzixiaofeng/p/10088620.html