1. 程式人生 > >希爾排序--C語言

希爾排序--C語言

  近期由於身體不適,好久不曾寫部落格了。但是覺得生病不應該成為不學習的藉口,所以今天開始還是繼續自己的學習之旅。因為一旦停的時間久了,藉口會越來越多,最後重蹈覆轍,之前的努力又白費了。
  今天寫的是希爾排序。希爾排序是插入排序的一種。它將待排序的陣列按照一定間隔分為若干個子序列,對每個子序列分別進行直接插入排序。然後縮小間隔,繼續上述過程,直至間隔為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; }

  一週沒有敲程式碼便已經生疏了,倘若真是過了一個月都不寫的話估計連最基本的東西都寫不出來了。即時記憶力再好,也不如天天練習靠譜!以後風雨無阻,全年無休,堅持自己的程式碼之路~