排序之冒泡排序

来源:互联网 发布:柯洁评论黑嘉嘉 知乎 编辑:程序博客网 时间:2024/05/23 16:56

步骤:

  • 数列:  头..............尾
  • 从数列尾部开始,相邻元素比较大小,小的向头移动
  • 每一轮移动至头的数字按顺序排列下来

代码:

void BubbleSort(vector<int>& num){int size = num.size();for (int i = 0; i < size; i++){for (int j = size - 1; j>i; j--){if (num[j] < num[j - 1])swap(num[j], num[j - 1]);}}}

问题:

  • 例如对于数列 2,1,3,4,5,6,7,8,9
只有第一轮从尾至头交换了1,2两个数字,其他的都是按顺序排好的,那么就浪费了很多时间

改进:

  • 通过添加一个Flag,当从尾至头没有经过交换时直接退出循环

代码:

void BubbleSort(vector<int>& num){int size = num.size();int flag = 1;for (int i = 0; i < size&&flag; i++){flag = 0;for (int j = size - 1; j>i; j--){if (num[j] < num[j - 1]){swap(num[j], num[j - 1]);flag = 1;}}}}

不足:

  • 十分浪费内存,繁杂
  • 时间复杂度最好情况O(n),最坏情况O(n^2)
原创粉丝点击