Shell Sort 算法示例:第一趟循环分析
以下代码展示了 Shell Sort 算法的代码实现:
void unknown (Type a[], int n)
{
int d = 1, j;
while ( d < n /3 ) d = 3*d+1;
while ( d > 0 )
{
for ( int i = d; i < n; i++ )
{
Type temp = a[i];
j = i;
while ( j >= d && a[j-d] > temp )
{
a[j] = a[j-d]; j -= d; }
a[j] = temp;
}
d /= 3;
}
}
对于给出的整数数组,追踪第一趟 while ( d > 0 ) 内的每次 for 循环结束时数组中数据的变化。
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 分别为
77 44 99 66 33 55 88 22 44 11
根据给出的排序算法,可以追踪第一趟 while ( d > 0 ) 内的每次 for 循环结束时数组中数据的变化。下面是每一次循环的变化:
第一次循环: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 77 44 99 66 33 55 88 22 44 11
第二次循环: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 77 44 99 66 33 55 88 22 44 11
第三次循环: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 55 44 99 66 33 77 88 22 44 11
第四次循环: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 33 44 99 66 55 77 88 22 44 11
第五次循环: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 33 44 99 66 55 77 88 22 44 11
第六次循环: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 33 44 99 66 55 77 88 22 44 11
第七次循环: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 22 44 99 66 55 77 88 33 44 11
第八次循环: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 11 44 99 66 55 77 88 33 44 22
每次循环的数据移动次数如下所示:
第一次循环:无移动 第二次循环:无移动 第三次循环:1次移动 第四次循环:4次移动 第五次循环:无移动 第六次循环:无移动 第七次循环:3次移动 第八次循环:8次移动
因此,以上各次循环的数据移动次数分别是: 第一次循环:0次 第二次循环:0次 第三次循环:1次 第四次循环:4次 第五次循环:0次 第六次循环:0次 第七次循环:3次 第八次循环:8次
通过分析 Shell Sort 算法的第一趟循环,可以更直观地理解该算法的排序过程。Shell Sort 算法是一种插入排序的改进算法,它通过将数组分成多个子数组进行排序,并将子数组中的元素插入到另一个子数组中,最终实现对整个数组的排序。
原文地址: https://www.cveoy.top/t/topic/ERe 著作权归作者所有。请勿转载和采集!