排序复习

Posted shawnc24

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序复习相关的知识,希望对你有一定的参考价值。

  直接插入排序:O(N2)

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

  冒泡排序:O(N2)

void BubbleSort(int *a, int size)
{
	for (int i = 0; i < size; i++)
	{
		for (int j = 1; j < size-i; j++)
		{
			if (a[j] < a[j - 1])
			{
				int tmp = a[j - 1];
				a[j - 1] = a[j];
				a[j] = tmp;
			}
		}
	}
}

  希尔排序 O(N2)  设置步长,优化后的插入排序

void ShellSort(int *a, int size)
{
	int gap = size / 2;
	while (gap >= 1)
	{
		for (int i = 0; i < size; i ++)
		{
			for (int j = i + gap;  j<size; j = j - gap)
			{
				if (a[j] < a[j - gap])
				{
					int tmp = a[j - gap];
					a[j - gap] = a[j];
					a[j] = tmp;
				}
				break;
			}
		}
		gap = gap / 2;
	}
}

  简单选择排序 O(N2) 

void SelectSort(int *a,int size)
{
	for (int i = 0; i < size; i++)
	{
		for (int j = i + 1; j < size; j++)
		{
			if (a[j] < a[i])
			{
				int tmp = a[i];
				a[i] = a[j];
				a[j] = tmp;
			}
		}
	}
}

  快速排序 logN

void QuickSort(int *a, int size)
{
	if (size <=1)
		return;
	//哨兵i 哨兵j
	int first_val = a[0];
	int i = 1, j = size - 1;
	while (i != j)
	{
		//哨兵j开始行动
		while (j > i && a[j] >= first_val)
		{
			j--;
		}

		while (j > i && a[i] < first_val)
		{
			i++;
		}
		if(i<j)
		{
			int tmp = a[i];
			a[i] = a[j];
			a[j] = tmp;
		}
		

		/*for (int k = 0; k < size; k++)
		{
			std::cout << a[k] << std::endl;
		}
		std::cout << "
";*/
	}
	if (a[0] > a[j])
	{
		int tmp = a[0];
		a[0] = a[j];
		a[j] = tmp;
	}
	

	for (int k = 0; k < size; k++)
	{
		std::cout << a[k] << std::endl;
	}
	std::cout << "
";
	QuickSort(a, i);
	//这里很重要
	if(i==1)
		QuickSort(a+i, size-i);
	else
		QuickSort(a + i + 1, size - i - 1);
}

  

以上是关于排序复习的主要内容,如果未能解决你的问题,请参考以下文章

六千字快速复习七种常用排序

2021-10-21java:六千字快速复习七种常用排序

前端技能树,面试复习第 53 天—— 手写代码:数据处理 | 排序 | 扁平 | 去重 | 解析 | 分隔

PHP排序算法的复习和总结

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段