4-交换排序之--冒泡排序

冒泡排序的基本思想:

通过无序区中相邻记录关键字之间的比较和位置交换,使得关键字最小的记录如气泡一般逐渐的往上“漂浮”直至“水面”

n个元素排序,n-1趟冒泡,有序区逐渐扩大到全局有序。

从后向前比较,一趟排序后,把最小的数据移动到最前面

4-交换排序之--冒泡排序_第1张图片


代码如下:

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


冒泡排序的性能:

最好的情况:

    关键字在记录中顺序有序,只需进行一次冒泡

    比较次数:n-1

    移动次数:0

最坏的情况:

    关键字在记录序列中逆序有序,需进行n-1次冒泡

    比较次数:n*(n-1)/2

    移动次数:3n(n-1)/2


算法稳定性:

稳定


关于冒泡法的改进:

改进点是,要注意到,某一趟冒泡法时,如果没有发生交换,排序即可结束

代码如下:

void bubbleSort(int a[],int len)
{
	//设置一个标志位
	int exchangeflag = 0;
	for (int i = 0; i < len; i++)
	{
		for (int j = 0; j < len -i -1 ; j++)
		{
			if (a[j] < a[j + 1])
			{
				int tmp = a[j+1];
				a[j + 1] = a[j];
				a[j] = tmp;

				exchangeflag = 1;
			}

			//如果一次排序没有发生顺序交换,则说明已经有序,退出排序过程
			if (exchangeflag == 0)
				break;
		}
	}
}

    



你可能感兴趣的:(4-交换排序之--冒泡排序)