以下是冒泡排序的功能实现,时间复杂度O(n^2),算法本身的性能不高。
#define ASC 1
#define DESC 0
#define SWAP(ktype,k1,k2) do { ktype tmp=k1; k1=k2; k2=tmp; }while(0)
typedef int key_t;
int Compare(key_t k1, key_t k2)
{
if (k1 > k2) return 1;
else if (k1 < k2) return -1;
return 0;
}
/**
* @param order ASC->true, otherwise DESC
*/
void Bubble(key_t array[], int n, int (*_Compare)(key_t,key_t), bool asc = true)
{
int ret;
bool finish = true;
for (int i = n-1; i >= 1; i--) {
for (int j = 0; j < i; j++) {
ret = _Compare(array[j], array[j+1]);
if ((asc && (ret == 1)) || (!asc && (ret == -1))) {
SWAP(key_t, array[j], array[j+1]);
finish = false;
}
}
if (finish) break;
}
}