十大排序算法之希尔排序
• 时间复杂度 < 插入排序
• 思想
○ 直接插入排序因为是O(n²),在数据量很大或者数据移动位次太多会导致效率太低,很多排序都会想办法拆分序列,然后组合,希尔排序就是以一种特殊的方式进行预处理 ,考虑到了数据量和有序性两个维度来设计算法。使得序列前后之间小的尽量 在前面,大的尽量在后面,进行若干次的分组计算,最后一组即是一趟完整的直接插入排序。
示例
public void shellsort (int a[])
{
int d=a.length;
int team=0;//临时变量
for(;d>=1;d/=2)//共分成d组
for(int i=d;i<a.length;i++)//到那个元素就看这个元素在的那个组即可
{
team=a[i];
for(int j=i-d;j>=0;j-=d)
{
if(a[j]>team)
{
a[j+d]=a[j];
a[j]=team;
}
else {
break;
}
}
}
}