希爾排序

//*****************************希爾排序****************************
//思路:把數據分爲幾組,每組有gap個數據,gap可以是固定的,也可根據
//      數組的大小來變動,做法和插入排序一樣,只是每次數據後移時要後移
//      gap個位置,end--的時候也要移動gap個位置
//NOTE:end+gap不能超過數組的最大下標,否則會取到隨機數
//      while (end >= 0 && a[end]>tmp && end + gap < size)
//      或者在for循環裏面控制for (int index = 0; index < size - gap; ++index)
void ShellSort(int *a, size_t size)
{
                 assert(a );
                 int gap = size ;
                 while (gap > 1)
                {
                                gap = gap / 3 + 1;
                                 for (int index = 0; index < size; index++)
                                {
                                                 int end = index;
                                                 int tmp = a [end + gap];
                                                 while (end >= 0 && a [end]>tmp/* && end + gap < size*/)
                                                {
                                                                 a[end + gap] = a [end];
                                                                end -= gap;;
                                                }
                                                 a[end + gap] = tmp;
                                }
                }
}

void ShellSortTest()
{
                 //int arr[] = { 9, 5, 4, 2, 3, 6, 8, 0, 1, 7 };
                 int arr[] = { 9, 5, 4, 2, 5, 6, 8, 5, 1, 7 };
                 int _size = sizeof (arr) / sizeof(arr[0]);
                ShellSort(arr, _size);
                Print(arr, _size);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章