手撕十大排序算法(未完)

各个排序算法分析与优化:
(全部以升序为例子)
1.冒泡排序:
算法:从头开始比较每一对相邻元素,如果第一个元素比第二个元素大,就交换他们的位置。
在这里插入图片描述
代码演示:

void test01()
{
	int array[] = { 56,9,10,19,28,37,34 };
	int length = sizeof(array) / sizeof(int);

	for (int end = length - 1; end > 0; end--)
	{
		for (int begin = 1; begin <= end; begin++)
		{
			if (array[begin] < array[begin - 1])
			{
				int tmp = array[begin];
				array[begin] = array[begin - 1];
				array[begin - 1] = tmp;
			}
		}
	}
	
	for (int i = 0; i < length; i++)
	{
		cout << array[i] << "_";
	}
}

冒泡优化1:

//冒泡排序优化1
void test02()
{
	int array[] = { 56,9,10,19,28,37,34 };
	int length = sizeof(array) / sizeof(int);

	for (int end = length - 1; end > 0; end--)
	{
		bool flags = true;//假设每次否是排好序的
		for (int begin = 1; begin <= end; begin++)
		{
			if (array[begin] < array[begin - 1])
			{
				int tmp = array[begin];
				array[begin] = array[begin - 1];
				array[begin - 1] = tmp;

				//如果有交换 代表没有排好序
				flags = false;
			}
		}

		if (flags == true)
		{
			break;
		}
	}

	for (int i = 0; i < length; i++)
	{
		cout << array[i] << "_";
	}
}

冒泡优化2:

//冒泡排序优化2
void test03()
{
	int array[] = { 56,9,10,19,28,37,34 };
	int length = sizeof(array) / sizeof(int);

	for (int end = length - 1; end > 0; end--)
	{
		int sortedIndex = 1;
		for (int begin = 1; begin <= end; begin++)
		{
			if (array[begin] < array[begin - 1])
			{
				int tmp = array[begin];
				array[begin] = array[begin - 1];
				array[begin - 1] = tmp;

				sortedIndex = begin;
			}
		}
		end = sortedIndex;
	}

	for (int i = 0; i < length; i++)
	{
		cout << array[i] << "_";
	}
}

选择排序:
算法:
在这里插入图片描述

//选择排序+稳定性
void test11()
{
	int array[] = { 56,56,9,10,19,28,37,34 };
	int length = sizeof(array) / sizeof(int);

	for (int end = length - 1; end > 0; end--)
	{
		int maxIndex = 0;
		for (int begin = 1; begin <= end; begin++)
		{
			if (array[maxIndex] <= array[begin])
			{
				maxIndex = begin;
			}
		}
		int tmp = array[maxIndex];
		array[maxIndex] = array[end];
 		array[end] = tmp;
	}

	for (int i = 0; i < length; i++)
	{
		cout << array[i] << "_";
	}
	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章