算法思想不做赘述。
二分查找:
int binarySearch(int *a,int len,int key){
int left=0,right=len-1;
while(left<==right){
int mid=left+(right-left)/2;
if(a[mid]==key)
return mid;
else if(a[mid]<key)
left=mid+1;
else
right=mid-1;
}
return -1;
}
快排:
void quickSort(int *a,int left,int right){
int i,j.mddle;
i=left,j=right;
middle=a[left+(right-left)/2];
while(i<j){
while(a[i]<middle&&i<right)
i++;
while(a[j]>middle&&j>left)
j--;
if(i<=j)
swap(a[i++],a[j--]);
}
if(i<right)
quickSort(a,i,right);
if(j>left)
quickSort(a,left,j);
}
堆排:
void maxheap_down(int *a,int start,int end){
int c=start;//当前节点位置
int l=2*c+1;//左孩子
for(;l<=end;c=l,l=2*l+1){
if(l<end&&a[l]<a[l+1])
l++;
if(a[c]>a[l])
break;
else
swap(a[c],a[l]);
}
}
void heap_sort_asc(int *a,int n){
int i;
for(i=n/2-1;i>=0;i--)
maxheap_down(a,i,n-1);
for(i=n-1;i>0;i--){
swap(a[0],a[i]);
maxheap_down(a,0,i-1);
}
}