冒泡排序思想:两两比较关键字的大小,如果与要求序列相反则交换。每次排序后保证有一个数据是排好序的,
比如从小到大排序,最大的数就好像最大的一个泡,逐渐的沉入最底下,而其他的则浮上来。
该算法是稳定的排序方法。时间复杂度,最差,最坏是O(n^2),最好是O(n);空间复杂度O(1)。
#include<iostream>
#include<string>
using namespace std;
template<typename T>
void bubble_sort(T *A, int size){
int i,j,swap=0;
T temp;
for(i=0;i<size-1;i++)
{
for(j=0;j<size-i-1;j++){
if(A[j]>A[j+1]){
temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
swap=1;
}
}
if(!swap)
break;
}
}
鸡尾酒排序算法:即冒泡算法的一个改进,双向排序
// cocktail sort
template<typename T>
void cocktail_sort(T *A, int size){
int j,swap=0;
T temp;
int low=0,high=size-1;
while(low<high){
for(j=low;j<high;j++){
if(A[j]>A[j+1]){
temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
swap=1;
}
}
if(!swap)
break;
high--;
for(j=high;j>low;j--){
if(A[j]<A[j-1]){
temp=A[j];
A[j]=A[j-1];
A[j-1]=temp;
swap=1;
}
}
if(!swap)
break;
low++;
}
}