排序总结--直接插入排序,希尔排序

直接插入排序

时间复杂度:最好:O(n)

                      最坏:O(n^2)

空间复杂度:O(1)

稳定

void InsertSort(int *arr,int len)
{
	int tmp;
	int i;
	int j;
	for(i =1;i<len;i++)
	{
		tmp = arr[i];
		for(j= i-1;j>=0;j--)
		{
			if(arr[j] <= tmp)
			{
				break;
			}
			else
			{
				arr[j+1] = arr[j];
			}
		}
		arr[j+1] = tmp;
	}
}

 希尔排序

时间复杂度:最好:O(n)^1.3-1.5

                      最坏:O(n^2)

空间复杂度:O(1)

稳定

void shell(int *arr,int len,int gap)
{
	int tmp;
	int i;
	int j;
	for(i = gap;i<len;i++)
	{
		tmp = arr[i];
		for(j = i-gap;j >= 0;j -= gap)
		{
			if(arr[j] <= tmp)
			{
				break;
			}
			else
			{
				arr[j+gap] = arr[j];
			}
		}
		arr[j+gap] =tmp; 
	}
}
void ShellSort(int *arr,int len)
{
	int d[] = {5,3,1};
	for(int i= 0;i<sizeof(d)/sizeof(d[0]);i++)
	{
		shell(arr,len,d[i]);
	}
}

猜你喜欢

转载自blog.csdn.net/kkkwinter/article/details/81432240