冒泡排序

参考自:每日算法】C语言8大经典排序算法(1)

1、算法思路


依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。[摘自每日算法】C语言8大经典排序算法(1)]


2、代码


#include<iostream>
#include<string>
using namespace std;

void main(void)
{
	int array[10] = {9,8,7,6,5,4,3,2,1,0};
	int num = 10;

	//step1: 遍历数组,输出初始排列
	for (int arN = 0; arN < num; arN++)
	{
		cout << array[arN]<<' ';
	}
	cout << endl;

	//step2: 冒泡法排序
	for (int lun=0; lun< num-1; lun++)//因为要将num个元素排成升序,只需将前num-1个较大的数冒泡到末尾
	{
		for (int ci=0; ci < num-lun-1; ci++)//num-lun是因为第lun轮时,后面的lun个数已经是排好序的,不用再排列
		{				    //num-lun-1是因为,num-lun个数相互比较,只需比较num-lun-1次
			if (array[ci]>array[ci + 1])
			{
				int temp;
				temp = array[ci];
				array[ci] = array[ci + 1];
				array[ci + 1] = temp;
			}
		}
	}

	//step3: 遍历数组,输出排序后结果
	for (int arN = 0; arN < num; arN++)
	{
		cout << array[arN]<<' ';
	}
}



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