- MT5(C++)软件编程十大排序算法 - 冒泡排序算法 (bubble Sort)
- MT5(C++)软件编程十大排序算法 - 选择排序算法 (select Sort)
- MT5(C++)软件编程十大排序算法 - 插入排序算法 (insert Sort)
- MT5(C++)软件编程十大排序算法 - 快速排序算法 (quick Sort)
- MT5(C++)软件编程十大排序算法 - 希尔排序算法 (shell Sort)
- MT5(C++)软件编程十大排序算法 - 堆排序算法 (heap Sort)
- MT5(C++)软件编程十大排序算法 - 归并排序算法 (merge Sort)
- MT5(C++)软件编程十大排序算法 - 计数排序算法 (counting Sort)
- MT5(C++)软件编程十大排序算法 - 桶排序算法 (bucket Sort)
- MT5(C++)软件编程十大排序算法 - 基数排序算法 (radix Sort)

1希尔排序算法
以二分之一分递归分割数组
arr: 需要排序的数组
seq: 排序的方向, true 为升序, false为降序
template <typename T1>
void shellSort(T1 &arr[], const bool seq = true)
{
int gap,i,j,temp;
int size = ArraySize(arr);
if(seq)
{
gap = size >> 1;
while(gap >= 1)
{
for(i=gap; i< size; i++) // gap 4
{
temp = arr[i];
j = i - gap; // 4 - 4 = 0
while(j >= 0 && arr[j] > temp)
{
arr[j + gap] = arr[j];
j -= gap;
}
arr[j + gap] = temp;
}
gap >>= 1;
}
}
else
{
gap = size >> 1;
while(gap >= 1)
{
for(i=gap; i< size; i++) // gap 4
{
temp = arr[i];
j = i - gap; // 4 - 4 = 0
while(j >= 0 && arr[j] < temp)
{
arr[j + gap] = arr[j];
j -= gap;
}
arr[j + gap] = temp;
}
gap >>= 1;
}
}
}
2希尔排序算法
以二分之一分递归分割数组
arr: 需要排序的数组
seq: 排序的方向, true 为升序, false为降序
template <typename T1>
void shellSort2(T1 &arr[], const bool seq = true)
{
if(typename(arr) == "int" || typename(arr) == "double")
{
int gap,i,j,temp;
int size = ArraySize(arr);
if(seq)
{
gap = size >> 1;
while(gap >= 1)
{
for(i=gap; i< size; i++) // gap 4
{
for(j = i; j - gap >= 0; j -= gap)
{
if(arr[j - gap] < arr[j]) break;
if(arr[j - gap] > arr[j]) swap(arr[j],arr[j - gap]);
}
}
gap >>= 1;
}
}
else
{
gap = size >> 1;
while(gap >= 1)
{
for(i=gap; i< size; i++) // gap 4
{
for(j = i; j - gap >= 0; j -= gap)
{
if(arr[j - gap] > arr[j]) break;
if(arr[j - gap] < arr[j]) swap(arr[j],arr[j - gap]);
}
}
gap >>= 1;
}
}
}
}