快速排序
#include <stdio.h>
void swap(int* a,int* b)
{
int temp=*a;
*a=*b;
*b=temp;
}
int partition(int arr[],int low,int high)
{
int pivot = arr[high];
int i = low-1;
for(int j=low;j<high;j++)
{
if(arr[j]<pivot)
{
i++;
swap(&arr[i],&arr[j]);
}
}
swap(&arr[i+1],&arr[high]);
return i+1;
}
void quickSort(int arr[],int low,int high)
{
if(low<high)
{
int pi = partition(arr,low,high);
quickSort(arr,low,pi-1);
quickSort(arr,pi+1,high);
}
}
void printArray(int *arr,int size)
{
for(int i=0;i<size;i++)
{
printf("%d ",arr[i]);
}
puts("");
}
归并排序
#include <stdio.h>
#include <stdlib.h>
void merge(int arr[],int left,int mid,int right)
{
int n1=mid-left+1;
int n2=right-mid;
int *L=(int*)malloc(n1*sizeof(int));
int *R=(int*)malloc(n2*sizeof(int));
for(int i=0;i<n1;i++)L[i]=arr[left+i];
for(int i=0;i<n2;i++)R[i]=arr[mid+i+1];
int i=0,j=0,k=left;
while(i<n1&&j<n2)
{
if(L[i]<R[j])arr[k++]=L[i++];
else arr[k++]=R[j++];
}
while(i<n1)arr[k++]=L[i++];
while(j<n2)arr[k++]=R[j++];
free(L);
free(R);
}
void mergeSort(int arr[],int left,int right)
{
if(left<Right)
{
int mid=(left+right)>>1;
mergeSort(arr,left,mid);
mergeSort(arr,mid+1,right);
merge(arr,legt,mid,right);
}
}
void printArray(int arr[],int n)
{
for(int i=0;i<n;i++)printf("%d ",arr[i]);
puts("");
}