数据结构——冒泡排序
2018-11-05 20:14
162 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43479736/article/details/83754735
冒泡排序原理
比如要对n个数进行冒泡排序,用两个for循环,外层循环控制循环次数,内层循环从第一个位置开始相邻两个数进行比较,如果前面的数大就交换否则不交换,就这样一直进行比较直到比到最后一个数为止。然后你会发现n个数里最大的数已经被移到最后位置了。比如下面这个数组:
5 |
12 |
41 |
14 |
21 |
13 |
19 |
7 |
44 |
29 |
经过一次冒泡排序过后:
5 |
12 |
41 |
14 |
21 |
13 |
19 |
7 |
44 |
29 |
5 |
12 |
41 |
14 |
21 |
13 |
19 |
7 |
44 |
29 |
5 |
12 |
14 |
41 |
21 |
13 |
19 |
7 |
44 |
29 |
5 |
12 |
14 |
21 |
41 |
13 |
19 |
7 |
44 |
29 |
5 |
12 |
14 |
21 |
13 |
41 |
19 |
7 |
44 |
29 |
5 |
12 |
14 |
21 |
13 |
19 |
41 |
7 |
44 |
29 |
5 |
12 |
14 |
21 |
13 |
19 |
7 |
41 |
44 |
29 |
5 |
12 |
14 |
21 |
13 |
19 |
7 |
41 |
44 |
29 |
5 |
12 |
14 |
21 |
13 |
19 |
7 |
41 |
29 |
44 |
这样就将最大的数排在了最后面,简单的原理大致就是这样,至于细节我们还是通过代码来观察。
冒泡排序代码
[code]#include <iostream> using namespace std; #define SIZE 10 void Swap(int *p1, int *p2); //交换两个数 void BubbleSort(int arry[], int size); //冒泡排序 int main() { int arry[SIZE] = { 52, 48, 65, 40, 12, 51, 99, 78, 58, 68 }; BubbleSort(arry, SIZE); for (int i = 0; i < SIZE; i++) cout << arry[i] << " "; cout << endl; system("pause"); return 0; } void Swap(int *p1, int *p2) { int temp = *p1; *p1 = *p2; *p2 = temp; } void BubbleSort(int arry[], int size) { for (int i = 0; i < size - 1; i++) //控制循环次数 { for (int j = 0; j < size - 1; j++) //将最大的数移到最后面 { if (arry[j]>arry[j + 1]) Swap(&arry[j], &arry[j + 1]); } } }
大家看看这个代码是不是还有改进的地方呢?比如到遇到一个本来已经排好序的数组,是不是还是要循环n-1次呢?下面是改进后的代码。
[code]#include <iostream> using namespace std; #define SIZE 10 void Swap(int *p1, int *p2); //交换两个数 void BubbleSort(int arry[], int size); //冒泡排序 int main() { int arry[SIZE] = { 52, 48, 65, 40, 12, 51, 99, 78, 58, 68 }; BubbleSort(arry, SIZE); for (int i = 0; i < SIZE; i++) cout << arry[i] << " "; cout << endl; system("pause"); return 0; } void Swap(int *p1, int *p2) { int temp = *p1; *p1 = *p2; *p2 = temp; } void BubbleSort(int arry[], int size) { for (int i = 0; i < size - 1; i++) //控制循环次数 { int flag = 0; for (int j = 0; j < size - 1; j++) //将最大的数移到最后面 { if (arry[j]>arry[j + 1]) { flag = 1; Swap(&arry[j], &arry[j + 1]); } } if (flag == 0)//如果flag=0则没有交换 说明整个数组已经排好序就不用再继续循环直接退出 return; } }
PS:这是博主第一次发表文章,想通过这样的方式来复习一下以前学习的知识并分享给大家,如果有什么做的不好的地方欢迎留言哈,之后一定改进。
相关文章推荐
- 数据结构(C#)_排序算法(冒泡排序)
- 【数据结构与算法】冒泡排序
- [数据结构与算法]C#冒泡排序
- 【Lehr】【数据结构与算法】【C语言】改进版的冒泡排序
- 数据结构之冒泡排序
- 数据结构之冒泡排序
- 【数据结构】单链表—冒泡排序
- 数据结构基础算法整理归纳:冒泡排序(二)
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- 数据结构(C#)_排序算法(冒泡排序)
- 数据结构之冒泡排序
- 数据结构(排序)--冒泡排序
- 结构体数据类型的冒泡排序
- 数据结构——内部排序算法比较(冒泡排序、直接插入排序、简单选择排序、希尔排序、快速排序、堆排序、归并排序)
- 数据结构——冒泡排序
- <二>java数据结构与算法 冒泡排序
- 数据结构之冒泡排序与插入排序的思想与实现
- 数据结构之排序(一)冒泡排序
- 数据结构之排序:冒泡排序
- 数据结构之排序(二)—— 冒泡排序