数据结构| |冒泡排序

冒泡排序:也叫作起泡排序

对于n个数据,进行n-1次冒泡,每一次冒泡将最大的或者最小的放到序列的第n个,然后在进行下一次冒泡,下次冒泡将前n-1个数据的最小的,放到n-1的位置上,一次冒泡,知道n-1结束,那么该序列也就有有序了。

例:比如对一个数组含有八个元素分别为:2    5    4    6    9    7    1    8    对其进行排序

则排序的流程为:第一趟:从2向后两两进行比较,将两者中大的放在后面,直到比到最后一位,

最后将9放到最后面,变为    2    4    5    6    7    1    8,对其六个数字比较了5次

                           第二趟:从2后面两两进行比较,直到比到倒数第二位,即9的前一位,因为就已经确定是最大的了,就不需要在进行比较了,只需要比较4次,这是对于五个数字

                           然后依次这样后面进行比较即可,直到比较到只剩下第一位了,那就不需要再进行比较了,这个时候序列已经有序了。

规律:对于n个数据,要比较n-1趟,而对于每一趟,比较n-i-1次,i表示第几趟,i从零开始

代码如下:

1.基础版(没有进行任何优化)

void bubble_sort(int arr[], int sz)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < sz - 1; i++)//趟数
	{
		for (j = 0; j < sz - i - 1; j++)
		{
			if (arr[j + 1] < arr[j])
			{
				Swap(arr + j + 1, arr + j);
			}
		}
	}
}

2.进阶版(对冒泡排序进行了优化)

//增加了表示对于冒泡排序,如果有一次没有对序列进行元素交换,那么就说明序列已经有序,那就不需要再进行排序了
void bubble_sort_OP(int arr[], int sz)
{
	int i = 0;
	int j = 0;
	bool flag = true;
	for (i = 0; i < sz - 1 && true; i++)//趟数
	{
		flag = false;
		for (j = 0; j < sz - i - 1; j++)
		{
			if (arr[j + 1] < arr[j])
			{
				Swap(arr + j + 1, arr + j);
				flag = true;
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40399012/article/details/80795083