冒泡排序与选择排序(最low的两兄弟)

个人主页:Lei宝啊

愿所有美好如期而遇


前言:

在我们的生活中,无处不在用到排序,比如说成绩的排名,淘宝,京东等等商品在各个方面的排序,这样看来一个好的算 法很重要,接下来我们要先了解一下比较挫的两个排序算法。


冒泡排序:

思路:

我们要做的就是将一组数据升序或者降序排列,使用两个循环,里面的循环在升序情况下,将最大的数字排到最后,为一次排序,外面的循环控制排序次数。

图解: 

冒泡排序与选择排序(最low的两兄弟)_第1张图片

代码:

void Bubble_Sort(int* arr, int n)
{

	int temp = 0;

	for (int i = 0; i < n - 1; i++)
	{
		int flag = 0;
		for (int j = 0; j < n - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;

				flag = 1;
			}
		}
		if (flag == 0)
		{
			break;
		}
	}
}

 选择排序:

思路:

类似于冒泡排序,也需要两个循环,我们需要一个开始位置和末尾位置,即begin和end,然后选出最小的数放在begin位置,最大的数放在end位置,然后同时往中间走,重复操作,直到相遇。

图解:

冒泡排序与选择排序(最low的两兄弟)_第2张图片

代码:

void SelectSort(int* arr, int n)
{
	int left = 0;
	int right = n - 1;

	while (left < right)
	{
		int max = left;
		int min = left;

		for (int i = left + 1; i <= right; i++)
		{
			if (arr[max] < arr[i])
			{
				max = i;
			}

			if (arr[min] > arr[i])
			{
				min = i;
			}
		}

		Swap(&arr[max], &arr[right]);

		if (min == right)
		{
			min = max;
		}

		Swap(&arr[min], &arr[left]);

		left++;
		right--;
	}
}

 

你可能感兴趣的:(数据结构,C语言,算法,数据结构,排序)