希尔排序是基于选择排序 由希尔发明的 希尔排序难点在gap对数组的分割 将数组分割为许多子数组 将子数组进行排序 每次预处理都将原始数组处理为接近有序 最终变为有序。
下图就是希尔排序的过程图:很简单
void ShellSort(int* arr, int sz)//多组进行排序
{
int gap = sz;
while (gap > 1)
{
gap = gap / 3 + 1;
for (int i = 0; i < sz-gap; i++)
{
for (int j = i+gap; j >= gap; j -= gap)
{
if (arr[j] < arr[j - gap])
{
Swap(&arr[j], &arr[j - gap]);
}
else
{
break;
}
}
}
}
其他版本:
//希尔排序
//void ShellSort(int* arr, int sz)//一组一组进行排序
//{
// int gap = sz;
// while (gap>1)
// {
// gap = gap / 3 + 1;
// for (int i = 0;i<sz;i+=gap)
// {
// for (int j = i; j >=gap; j-=gap)
// {
// if (arr[j] < arr[j - gap])
// {
// Swap(&arr[j], &arr[j - gap]);
// }
// else
// {
// break;
// }
// }
// }
// }
//}
//void ShellSort(int* arr, int sz)//多组进行排序
//{
// int gap = sz;
// while (gap > 1)
// {
// gap = gap / 3 + 1;
// for (int i = 0; i < sz-gap; i ++)
// {
// for (int j = i; j >= 0; j -= gap)
// {
// if (arr[j] > arr[j + gap])
// {
// Swap(&arr[j], &arr[j + gap]);
// }
// else
// {
// break;
// }
// }
// }
// }
//}
有什么疑惑都可以留言 我会及时回复