冒泡排序算法

冒泡排序的代码如下:

template
void bubble(T a[],int n)
{
	for (int i=0;i
void bubbleSort(T a[],int n)
{
	for(int i=n;i>1;i--)
		bubble(a,i);
}

第一个程序为一次冒泡排序过程,即从第一个元素开始,将其与右边相邻的元素进行对比,如果比右边相邻的元素大,则交换他们的位置,一轮比较下来,最大的元素就跑到最右边去了。

第二个程序为完整的冒泡排序过程,首先对所有的n个元素进行一次冒泡过程,将最大的元素移到最右边,然后对剩下的n-1个元素再进行一次冒泡过程,将剩下得n-1个元素里面最大的元素排到n-1这个位置,然后对剩下的n-2个元素再进行一次冒泡过程........,直到排序完成。


其实冒泡排序过程与选择排序过程是类似的,只是选择排序是直接找到最大的,放到最后,冒泡排序则是靠冒泡过程找到最大的并放到最后。


与之前的选择排序一样这个冒泡排序也存在不能及时终止的问题,下面是完善代码:

template
bool bubble(T a[],int n)
{
	bool swapped=false;
	for(int i=0;i
void bubbleSort(T a[],int n)
{
	for(int i=n;i>1&&bubble(a,i);i--);
}
上面这个程序理解起来比选择排序的终止算法要简单,只要在一次冒泡过程中没有发生交换,那么就可以说明数组已经排序好了,外层循环可以退出了。


你可能感兴趣的:(c++,C++算法)