冒泡排序:
冒泡排序(Bubble Sort,泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
排序的过程是用 嵌套的for循环完成的。对于10个元素的数组,一共进行9轮比较(pass从1-9)。每轮进行size-pass次比较,以决出一个最大值。
程序首先是第一轮比较(pass=1),即先比较a[0]和a[1],再比较a[1]和a[2],然后比较a[2]和a[3]........直到比较完a[8]和a[9]为止。数组有10个元素,但只是比较了9次(0-8)。因为是朝着一个方向两个两个比较的,较大的值在比较之后放在两者的后面。9次比较使10个元素都参与了比较,并在第一轮比较完之后,最大的值“下沉”在数组底部,即a[9]。
程序之后进行第二轮比较(pass=2),比较8次.......
程序之后进行第三次比较(pass=3),比较7次.......
..............
冒泡法比较易于实现,不论情况好坏都会进行比较,运行速度较慢。
1 #include "stdafx.h" 2 #include <iostream> 3 using namespace std; 4 5 void bubble(int[], int); //函数声明;其间不需要具体的变量名(写也可) 6 7 int main() 8 { 9 //定义一个10元素的数组 10 int array[] = { 12,23,45,56,78,89,96,63,25,58 }; 11 int len = sizeof(array) / sizeof(int); //求元素个数 12 for (int i = 0; i < len; i++) //按原顺序输出一遍 13 cout << array[i] << ","; //每输出一个元素用“,” 14 cout << endl << endl; //输出结束,两次换行 15 bubble(array, len); //调用冒泡函数 16 } 17 18 void bubble(int a[], int size) //冒泡排序 19 { 20 int i; 21 int temp; 22 //共比较size-1轮 23 for (int pass = 1; pass < size; pass++) 24 { 25 for (i = 0; i < size - pass; i++) //比较一轮 26 if (a[i] > a[i + 1]) //一次交换 27 { 28 temp = a[i]; 29 a[i] = a[i + 1]; 30 a[i + 1] = temp; 31 } 32 for (i = 0; i < size; i++) //比较一轮后输出 33 34 cout << a[i] << ","; 35 cout << endl; 36 } 37 }
运行结果:
12,23,45,56,78,89,96,63,25,58,
12,23,45,56,78,89,63,25,58,96,
12,23,45,56,78,63,25,58,89,96,
12,23,45,56,63,25,58,78,89,96,
12,23,45,56,25,58,63,78,89,96,
12,23,45,25,56,58,63,78,89,96,
12,23,25,45,56,58,63,78,89,96,
12,23,25,45,56,58,63,78,89,96,
12,23,25,45,56,58,63,78,89,96,
12,23,25,45,56,58,63,78,89,96,