冒泡排序

来源:互联网 发布:腾讯官网软件下载 编辑:程序博客网 时间:2024/05/21 10:07

参考自:每日算法】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]<<' ';}}



1 0