数据结构-十大经典算法之希尔排序
- 算法思想
- 算法步骤
- 算法动态演示
- 部分代码实现
第一部分:算法思想
希尔排序由Shell在1959年发明,又叫缩小增量排序,是第一个突破O(n^2)的排序算法,属于简单插入排序的改进版,会优先比较距离较远的元素。
第二部分:算法步骤
选择一个增量序列;每趟排序,根据对应的增量,将待排序列分割成若干子序列,分别对各子序列进行直接插入排序;按增量序列个数,对序列进行趟排序。
第三部分:算法动态演示
下图的增量序列为:5,2,1,第一趟排序将增量为5的子序列进行插入排序,第二趟排序将增量为2的子序列进行插入排序,第三趟将增量为1的子序列进行插入排序,最终完成排序。
第四部分:部分代码实现
void sort_array(int *arr, int n)
// 编程实现《希尔排序算法》
// 函数参数:乱序整数数组 数组长度
// 函数返回值:返回从小到大排序后的数组
{
int gap_arr[3] = {5, 2, 1};
for(int g=0; g<3; g++) {
int gap = gap_arr[g];
// 缩小增量
for(int i = gap; i < n; i++) {
//插入排序简洁写法
int val = arr[i];
for(int j = i-gap; j>=0; j-=gap){
if(arr[j]>val){
arr[j+gap] = arr[j];
arr[j] = val;
}else{
break;
}
}
}
}
}
- 看到这了,如果觉得有用的话动动手指点个赞吧,下期带来“数据结构-十大经典排序算法之快速排序”。