归并排序
#include<stdlib.h>
#include<stdio.h>
static void merge(int arr[],int tmpArr[],int lpos,int rpos,int rend){
int lend,start,num,i;
lend=rpos-1;
start=lpos;
num=rend-lpos+1;
while(lpos<=lend && rpos<=rend){
if(arr[lpos]<arr[rpos])
tmpArr[start++]=arr[lpos++];
else tmpArr[start++]=arr[rpos++];
}
while(lpos<=lend)
tmpArr[start++]=arr[lpos++];
while(rpos<=rend)
tmpArr[start++]=arr[rpos++];
for(i=0;i<num;i++,rend--)
arr[rend]=tmpArr[rend];
}
void mSort(int arr[],int tmpArr[],int left,int right){
if(left<right){
int center;
center=(left+right)/2;
mSort(arr,tmpArr,left,center);
mSort(arr,tmpArr,center+1,right);
merge(arr,tmpArr,left,center+1,right);
}
}
void mergeSort(int arr[],int N){
int *tmpArr;
tmpArr=malloc(sizeof(int)*N);
if(tmpArr==NULL){
puts("arrange array fail");
exit(1);
}
mSort(arr,tmpArr,0,N-1);
free(tmpArr);
}
void printArray(int arr[],int N){
int i;
for(i=0;i<N;i++)
printf("%d\t",arr[i]);
printf("\n");
}
int main(){
int array[9]={56,78,33,22,14,156,123,64,634};
mergeSort(array,9);
printArray(array,9);
return 0;
}
快速排序
#include<stdlib.h>
#include<stdio.h>
#define cutoff 3
void printArray(int arr[],int N){
int i;
for(i=0;i<N;i++)
printf("%d\t",arr[i]);
printf("\n");
}
void insertSort(int A[],int N){
int i,j;
for(i=1;i<N;i++){
int tmp=A[i];
for(j=i;j>0 && tmp<A[j-1];j--)
A[j]=A[j-1];
A[j]=tmp;
}
}
static void swap(int *a,int *b){
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
static int median(int arr[],int left,int right){
int center=(left+right)/2;
if(arr[left] > arr[center])
swap(&arr[left],&arr[center]);
if(arr[left]>arr[right])
swap(&arr[left],&arr[right]);
if(arr[center]>arr[right])
swap(&arr[center],&arr[right]);
swap(&arr[center],&arr[right-1]) ;
return arr[right-1];
}
void qSort(int arr[],int left,int right){
int i,j;
if(left+cutoff<=right){
int pivot=median(arr,left,right);
i=left;j=right-1;
for(; ; ){
while(pivot>arr[++i]) {}
while(pivot<arr[--j]) {}
if(i<j)
swap(&arr[i],&arr[j]);
else break;
}
swap(&arr[i],&arr[right-1]);
qSort(arr,left,i-1);
qSort(arr,i+1,right);
}
else insertSort(arr+left,right-left+1);
}
void quickSort(int arr[],int N){
qSort(arr,0,N-1);
}
int main(){
int arr[]={89,654,23,54,15,84,96,568,14,26,487,9,4,11,99,0,65,43};
quickSort(arr,18);
printArray(arr,18);
return 0;
}