希爾排序
//*****************************希爾排序****************************
//思路:把數據分爲幾組,每組有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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.