希尔排序C语言代码

/*
 *希尔排序
 */

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define LEN 10

typedef int dataType;

//初始化数组,赋值整数随机数
void initArr(dataType arr[], int len);
//希尔排序
void shellSort(dataType arr[], int len);
//交换两个数
void swap(dataType &x,dataType &y);
//打印数组元素
void print(dataType arr[], int len);

int main()
{
 dataType arr[LEN];
 initArr(arr,LEN);
 printf("================希尔排序================");
 //输出排序前的数组元素
 printf("\n排序前数组元素:");
 print(arr,LEN);
 shellSort(arr,LEN);
 printf("\n排序后数组元素:");
 print(arr,LEN);
 printf("\n");
 return 0;
}


//初始化数组,赋值整数随机数
void initArr(dataType arr[], int len)
{
 int i = 0;
 srand((unsigned)time(NULL));
 for(i = 0; i < len; i++)
  arr[i] = rand();
}
//希尔排序
void shellSort(dataType arr[], int len)
{
 int h = 0;
 int i = 0;
 int j = 0;
 //设置步长
 for(h = 1; h < len; h = 3 * h + 1)
  ;
 while(h)
 {
  h /= 3;
  if(h < 1)
   break;
  for(i = h; i < len; i++)
   for(j = i; j >= h; j-=h)
   {
    if(arr[j-h] < arr[j])
     break;
    swap(arr[j-h],arr[j]);
   }
 }
}

//交换两个数
void swap(dataType &x,dataType &y)
{
 dataType temp;
 temp = x;
 x = y;
 y = temp;
}

//打印数组元素
void print(dataType arr[], int len)
{
 int i = 0;
 for(i = 0; i< LEN; i++)
 {
  if(i % 5 == 0)
  {
   printf("\n");
  }
  printf("%d\t",arr[i]);
 }
}

希尔排序C语言代码_第1张图片

 

/*博主寄语:如若发现错误,望指出,谢谢*/

你可能感兴趣的:(c,代码,希尔排序,语言)