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

各個排序算法分析與優化:
(全部以升序爲例子)
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] << "_";
	}
	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章