排序-冒泡排序
大部分的互联网校招的笔试都会有算法与数据机构的题目,为了准备笔试,开始算法与数据结构的学习。
本文是基础的冒泡排序,此系列学习都用的C++.
冒泡排序语言叙述:
假设要求递增排序。选取第一个元素,遍历后面元素并与之比较,如果大于,则交换2者位置;重复上述过程,直到最后一个元素。
代码如下:
bool BubbleSort(int *Array){ int temp; for(int i = 0; i < length(Array); i++){ for(int j = 0; j < length(Array); j++){ if(Array[j] > Array[j+1]){ temp = Array[i]; Array[i] = Array[j]; Array[j] = temp; } } } return true; }
这样的代码效率太低,因为不管这次循环有没有产生交换,都会把这次遍历跑完,其实没有必要这样,如果没有发生交换,则可以跳出本次循环,进行下一次循环,所以改进后如下:
bool BubbleSort(int *Array){ int temp; for(int i = 0; i < length(Array); i++){ int flag = 0;//标志为0表示没有发生交换 for(int j = 0; j < length(Array); j++){ if(Array[j] > Array[j+1]){ temp = Array[i]; Array[i] = Array[i+1]; Array[i+1] = temp; flag = 1;//发生交换,标志为1 } } if (flag == 0) break;//若无交换,结束本次循环 } return true; }
冒泡排序,有嵌套的for循环,所以时间复杂度为O(n2), 空间复杂度为O(1).