数据结构与算法:从插入排序到希尔排序

数据结构与算法:从插入排序到希尔排序

学完插入排序和希尔排序之后,我才恍然大悟,希尔排序就是插入排序的进阶版
所以如果想写一个希尔排序,可以先写一个插入排序,然后加上一个增量increment
具体做法为将插入排序的递增或者递减1换成增量increment
如下是一个插入排序

/*********** 插入排序 ***********/
int InsertSort(double *arr, int arrLenth)
{
    
    
	int i, j;
	for (i = 0 ; i < arrLenth -1 ; i++)
	{
    
    
		if (arr[i] > arr[i+1])
		{
    
    
			int temp = arr[i+1];
			for (j = i; j >= 0 && arr[j] > temp; j--)
			{
    
    
				arr[j + 1] = arr[j];
			}
			arr[j + 1] = temp;
		}
	}

	return 0;
}

完成了插入排序之后,在插入排序的基础上将插入排序的递增或者递减1换成增量increment
如下是一个在插入排序基础上变换来的希尔排序

/*********** 希尔排序 ***********/
int ShellSort(double *arr, int arrLenth)
{
    
    
	int i, j;
	int increment = arrLenth;
	
	for (increment = increment / 3; increment >= 1; increment = increment / 3)
	{
    
    
		for (i = 0; i < arrLenth - increment; i++)
		{
    
    
			if (arr[i] > arr[i + increment])
			{
    
    
				int temp = arr[i + increment];
				for (j = i; j >= 0 && arr[j] > temp; j -= increment)
				{
    
    
					arr[j + increment] = arr[j];
				}
				arr[j + increment] = temp;
			}

		}
	}

	return 0;
}

如上!

猜你喜欢

转载自blog.csdn.net/weixin_41645749/article/details/108506037