希爾排序--C語言
阿新 • • 發佈:2019-01-08
近期由於身體不適,好久不曾寫部落格了。但是覺得生病不應該成為不學習的藉口,所以今天開始還是繼續自己的學習之旅。因為一旦停的時間久了,藉口會越來越多,最後重蹈覆轍,之前的努力又白費了。
今天寫的是希爾排序。希爾排序是插入排序的一種。它將待排序的陣列按照一定間隔分為若干個子序列,對每個子序列分別進行直接插入排序。然後縮小間隔,繼續上述過程,直至間隔為1,則為普通插入排序。
演算法程式碼如下:
#include <stdio.h>
//data為待排序陣列,interval為開始間隔,len為陣列長度
void shellInsert(int data[],int interval, int len)
{
int i = 0;
int j = 0;
for(i = interval + 1;i < len;i++)
{
if(data[i] < data[i - interval])
{
data[0] = data[i];
for(j = i - interval;j > 0 && (data[j] > data[0]);j = j - interval)
{
data[j + interval] = data[j];
}
data[j + interval] = data[0];
}
}
}
//data為待排序陣列,interval為間隔陣列,len1為代排序陣列長度,len2為間隔陣列長度
void shellSort(int data[],int interval[],int len1,int len2)
{
int i = 0;
for(i = 0;i < len2;i ++)
{
shellInsert(data,interval[i],len1) ;
}
}
int main()
{
int i = 0;
int data[] = {0,35,42,25,19,33,24,58,66,34,20};
int interval[] = {5,3,1};
for(i = 1;i < 11;i++)
{
printf("%d ",data[i]);
}
printf("\n");
shellSort(data,interval,11,3);
for(i = 1;i < 11;i ++)
{
printf("%d ",data[i]);
}
printf("\n");
return 0;
}
一週沒有敲程式碼便已經生疏了,倘若真是過了一個月都不寫的話估計連最基本的東西都寫不出來了。即時記憶力再好,也不如天天練習靠譜!以後風雨無阻,全年無休,堅持自己的程式碼之路~