1、快速排序
int huafen(int A[],int l,int r){
int mid=A[l];
while(l<r){
while(l<r && A[r]>=mid) r--; // 将右边比它小的元素移动到左边来
A[l]=A[r];
while(l<r && A[l]<=mid) l++;
A[r]=A[l];
}
A[l]=mid;
return l;
}
void Qsort(int A[],int l,int r){
if(l>=r) return ;
int M=huafen(A,l,r);
Qsort(A,l,M-1);
Qsort(A,M+1,r);
}
2、二路归并
void Merge(int A[],int l,int mid,int r){
int *B=(int *)malloc(sizeof(int)*(r-l+10));
int i,j,k=l;
for(i=l;i<=r;i++){
B[i]=A[i];
}
for(i=l,j=mid+1;i<=mid&&j<=r;k++){
if(B[i]>B[j]) A[k]=B[j++];
else A[k]=B[i++];
}
while(i<=mid) A[k++]=B[i++];
while(j<=r) A[k++]=B[j++];
}
void MergeSort(int A[],int l,int r){
if(l<r){
int mid=(l+r)/2;
MergeSort(A,l,mid);
MergeSort(A,mid+1,r);
Merge(A,l,mid,r);
}
}
3、直接插入排序
void InsertSort(int A[],int n){
int i,j;
for(i=1;i<n;i++){
if(A[i]<A[i-1]){
int temp=A[i];
for(j=i-1;j>=0;j--){
if(A[j]>temp){
A[j+1]=A[j];
} else {
break;
}
}
A[j+1]=temp;
}
}
}
4、冒泡排序
void BubbleSort(int A[], int n){
int i,j,flag=0;
for(i=0;i<n;i++){
flag=0;
for(j=n-1;j>i;j--){
if(A[j-1]>A[j]){
int temp=A[j-1];
A[j-1]=A[j];
A[j]=temp;
flag=1;
}
}
if(flag==0){
break;
}
}
}