印象网站建设,wordpress搭建是用临时域名,成都网站建设哪些公司好,wordpress字体在哪个文件夹目录 希尔排序是什么#xff1f;
关于时间复杂度
希尔排序的源代码
希尔排序源代码的详解 希尔排序是什么#xff1f;
之前我们说了三个排序#xff08;插入排序#xff0c;选择排序#xff0c;冒泡排序#xff09;有需要的铁铁可以去看看之前的讲解。
但因为之前的…目录 希尔排序是什么
关于时间复杂度
希尔排序的源代码
希尔排序源代码的详解 希尔排序是什么
之前我们说了三个排序插入排序选择排序冒泡排序有需要的铁铁可以去看看之前的讲解。
但因为之前的排序时间复杂度都是n^2.接下来介绍的希尔排序是一个时间优于前面三种排序的算法 由上图我们看到排序被分为了许多组不同的颜色这就是希尔排序的 第一步分组小排自己取得名 这一阶段呢就是要将每个组进行一个排序让其每个组都是有序的这样形成一个散乱但比之前更有序的结果可以从图中第一轮结果看出。 但我们发现好像这也没有序啊当然了如果这么简单那这个时间负责度就是n了所以就需要下一步了。 第二步改间隔重新排。 由于第一步的开荒数组比刚开始有序的多但还是模糊接下来如果我们把间隙改小那每一个小组的数字就会增多但又由于之前第一组的原因其实有些数据已经其实已经到了属于自己的位置那接下来就会减少损耗不用交换数据。就这样到gap1每组的间隔就有序了 总的希尔排序就是先分组在排序每次使模糊的答案清晰一点每一次的损耗都会减小最终当gap 1时只需轻轻擦拭即可得出答案。 关于时间复杂度 因为gap的原因所以希尔排序是不稳定的。
希尔排序的源代码
void ShellSort(int* a, int n)
{int gap n;while(gap1){gap gap / 2;for (int i 0; i n - gap; i){int end i;int tmp a[end gap];while (end 0){if (tmp a[end]){a[end gap] a[end];end - gap;}else{break;}}a[end gap] tmp;}}
}
希尔排序源代码的详解 首先传入一个数组a和数组个数n。 gap n为什么要gap 1呢因为当gap一直除以2最后一组的gap 一定是2。 因为之前介绍到到gap 1时排完这时候数组就是有序的了。所以当 gap 2 / 2 1时。最后一趟走完就可以走出循环了。