|
冒泡排序顾名思义,就是将一串数字比大小,分类好。
例:1,5,4,3,7,9
冒泡排序后(从小到大顺序):1,3,4,5,7,9
思路:对于一个数组,我们想对它进行排序,其实只要将相邻的两个数进行比较,把小的放前面就好了。
比如:如果有4个数(1, 8,5,2)。
1.第一次比较前两个数(1,8)的大小,把位置发现不需要交换,第二次比较在后面两个数(8,5)的大小,交换后是(5,8),再之后对(8,2)交换得到(2,8),所以进行了三次比较得到(1,5, 2,8);最大的数8已经到最后了,后面的2也上浮了一个位置,就像水中的气泡一样,所以叫冒泡排序法。
这时候发现还没完全排好。但是我们已经发现最大的数8已经在最后,所以我们只要对前面的三个数进行排序就好。
2.所以第一次比较1,5,发现不用交换,第二次比较5,2,交换后是2,5。最后成为(1,2,5,8)。所以我们用了两次把这三个数排好了。
3.本例很是巧合,前两个数1和2我们很清楚知道不用比较。事实上在不知道的情况下我们需要对他们进行比较一次,才能最终确定这4个数的顺序。
假设n个数,那么就要进行n-1 步,第i 步中则需要n-i 次比较。
所以我们的程序就出来了(以10个数的排序为例):
- #include <iostream>
- #include <string>
- using namespace std;
-
- int main() {
- int n[10];
- int i, j;
- int temp; //用于缓存需要交换的数字
- cout << "请输入十个数字!" << endl;
- for (i = 0; i < 10; i++) {
- cin >> n[i];
- }
- for (i = 0; i < 9;i++) { //共进行9步
- for (j = 0; j < 9 - i;j++) { //在每一步进行10-i次两两比较
- if (n[j] > n[j + 1]) {
- temp = n[j];
- n[j] = n[j + 1];
- n[j + 1] = temp;
- }
- }
- }
- cout << "排序后的数据是:" << endl;
- for (i = 0; i < 10; i++)
- {
- cout << n[i] << ' ';
- }
- cout << endl;
- system("pause");
- return 0;
- }
复制代码
|
|