0
点赞
收藏
分享

微信扫一扫

【Visual Studio】报错 LNK2019,使用 C++ 语言,配合 Qt 开发串口通信界面

思维导图:

 一,插入排序

代码:

void InsertSort(int* a, int n)
{   
	for (int i = 1;i < n;i++)
	{
		int end = i-1;
		int tmp = a[i];
		while (end >= 0)
		{
			if (tmp < a[end])
			{
				a[end + 1] = a[end];
				end--;
			}
			else
			{
				break;
			}
		}
		a[end + 1] = tmp;
	}

}

代码分析: 

插入排序的时间复杂度

二,希尔排序 

代码:单趟

void Shellsort(int* a, int n)
{
	int gap = 3;//
	for (int i = 0;i < n - gap;i+=gap)
	{
		int end = i;
		int tmp = a[i+gap];
		while (end>=0)
		{
			if (tmp < a[end])
			{
				a[end+gap] = a[end ];
				a[end] = tmp;
				end -= gap;
			}
			else
			{
				break;
			}
		}
		a[end + gap] = tmp;

	}
}

多趟:

 代码:

void Shellsort(int* a, int n)
{
	int gap = 3;//
	for (int j = 0;j < gap;j++) //加循环
	{
		for (int i = j;i < n - gap;i += gap)//i随着j变化来控制排序不同的组
		{
			int end = i;
			int tmp = a[i + gap];
			while (end >= 0)
			{
				if (tmp < a[end])
				{
					a[end + gap] = a[end];
					a[end] = tmp;
					end -= gap;
				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;

		}
	}
}

两层循环写法:

void Shellsort1(int* a, int n)
{
	int gap = 3;//

		for (int i = 0;i < n - gap;i++)
		{
			int end = i;
			int tmp = a[i + gap];
			while (end >= 0)
			{
				if (tmp < a[end])
				{
					a[end + gap] = a[end];
					a[end] = tmp;
					end -= gap;
				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;

		}
	
}

代码:

void Shellsort(int* a, int n)
{
	int gap = n;//最大的gap
	while (gap > 1) {
		gap = gap / 3 + 1;//最小为gap为1
		for (int i = 0;i < n - gap;i++)
		{
			int end = i;
			int tmp = a[i + gap];
			while (end >= 0)
			{
				if (tmp < a[end])
				{
					a[end + gap] = a[end];
					a[end] = tmp;
					end -= gap;
				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;

		}
	}
	
}
举报

相关推荐

0 条评论