一、快速排序
数据结构书上的算法
void quick_sort(int a[],int low,int high){
int l = low;
int r = high;
int key = a[l];//基准值(枢轴)
//处理一侧已经没有其他数据的情况
if(low>=high){
return;
}
while(l<r){
//l、r在循环中改变了值,key=a[r]将造成死循环
while(l<r && a[r]>=key) r--;
a[l] = a[r];
while(l<r && a[l]<=key) l++;
a[r] = a[l];
}
//还原key的位置
a[l]=key;
//递归调用也可另写函数
quick_sort(a,low,l-1);
quick_sort(a,l+1,high);
}
二、二分查找
递归
int BinarySearchRecursive(int *array, int low, int high, int key)
{
if ( low > high )
return -1;
int mid = ( low + high )/2;
if ( array[mid] == key )
return mid;
else if ( array[mid] < key )
return BinarySearchRecursive(array, mid+1, high, key);
else
return BinarySearchRecursive(array, low, mid-1, key);
}
非递归
int BinarySearch(int *array, int aSize, int key)
{
if ( array == NULL || aSize == 0 )
return -1;
int low = 0;
int high = aSize - 1;
int mid = 0;
while ( low <= high )
{
mid = (low + high )/2;
//修改边界继续查找
if ( array[mid] < key)
low = mid + 1;
else if ( array[mid] > key )
high = mid - 1;
else
return mid;
}
return -1;
}
三、宏定义
用于交换的宏定义
#define SWAP(x, y) {int t=x; x=y; y=t;}
一年有多少秒
#define YEAR (60*60*24*365)UL