冒泡排序(Bubble Sort)
简单来说冒泡排序就是比较长度为N的数组中相邻两个元素,如果前一个大于后一个就进行交换。
每一趟排序中最大的数都沉到底(N - -的位置)。
冒泡排序的过程:
第一趟:
。。。。。。
冒泡排序的代码:
template<typename T>
void BubbleSort(T arr[], int n){
for(int i = 0; i < n; i++){
for(int j = 1; j < n ; j++ ){
if( arr[j-1] > arr[j] )
swap(arr[j-1],arr[j]);
}
}
}
改进:
/*
* 改进过的冒泡排序
* 可能在中间某一轮的时候就已经完全排好序了,之后的就可以不去遍历了。
*/
template<typename T>
void AdvanceBubbleSort(T arr[], int n){
bool swappedFlag = true;
while(swappedFlag){
swappedFlag = false;
for(int j = 1; j < n ; j++ ){
if( arr[j-1] > arr[j] ){
swap(arr[j-1],arr[j]);
swappedFlag = true;
}
}
}
}
接着改进:
/*
* 改进过的冒泡排序
* 每一趟冒泡排序都讲最大的数沉底,因此下一趟排序n--
*/
template<typename T>
void AdvanceBubbleSort1(T arr[], int n){
bool swappedFlag = true;
while(swappedFlag){
swappedFlag = false;
for(int j = 1; j < n ; j++ ){
if( arr[j-1] > arr[j] ){
swap(arr[j-1],arr[j]);
swappedFlag = true;
}
}
n--;
}
}