码迷,mamicode.com
首页 > 编程语言 > 详细

常见排序之希尔排序

时间:2018-12-08 19:14:44      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:nbsp   位置   printf   希尔   插入   std   amp   length   incr   

#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;

}

常见排序之希尔排序

标签:nbsp   位置   printf   希尔   插入   std   amp   length   incr   

原文地址:https://www.cnblogs.com/muzixiaofeng/p/10088620.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!