目录
冒泡排序
void bubble_sort(int a[],int n){
int t;
for(int i=n-1;i>=0;i--)
for(int j=0;j<i;j++)
if(a[j]>a[j+1]){
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
插入排序
void insert_sort(int a[],int n){
int t,j;
for(int i=1;i<n;i++){
t=a[i];
for(j=i-1;j>=0&&a[j]>t;j--)
a[j+1]=a[j];
a[j+1]=t;
}
}
选择排序
void select_sort(int a[],int n){
int minn,t;
for(int i=0;i<n;i++){
minn=i;
for(int j=i+1;j<n;j++)
if(a[j]<a[minn])minn=j;
t=a[i];a[i]=a[minn];a[minn]=t;
}
}
快速排序
void quick_sort(int a[],int l,int r){
if(l>=r)return;
int i=l,j=r-1,x=a[i];
while(i<j){
while(a[j]>=x&&i<j)j--;
a[i]=a[j];
while(a[i]<=x&&i<j)i++;
a[j]=a[i];
}
a[i]=x;
quick_sort(a,l,i);
quick_sort(a,i+1,r);
}
归并排序
// 头尾包括
void merge(int a[],int b[],int l,int m,int r){
int i=l,j=m+1,k=0;
while(i<=m&&j<=r){
if(a[i]>a[j])b[k++]=a[j++];
else b[k++]=a[i++];
}
while(i<=m)b[k++]=a[i++];
while(j<=r)b[k++]=a[j++];
for(int i=0;i<k;i++)
a[i+l]=b[i];
}
void merge_sort(int a[],int b[],int l,int r){
if(l<r){
int m=(l+r)/2;
merge_sort(a,b,l,m);
merge_sort(a,b,m+1,r);
merge(a,b,l,m,r);
}
}
二分查找
int binary_find(int a[],int l,int r,int key){
int low=l,high=r-1,mid;
while(low<high){
mid=(low+high)/2;
if(a[mid]>key)
high=mid-1;
else if(a[mid]<key)
low=mid+1;
else
return mid;
}
return -1;
}