1、冒泡排序
void BubbleSort(int *arr,int n)
{
int i,j;
int tem;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
{
if(arr[j+1]<arr[j])
{
tem=arr[j+1];
arr[j+1]=arr[j];
arr[j]=tem;
}
}
}
2、选择排序
void SelectSort(int arr[],int n)
{
int i,j;
int temp,flag=0;
for(i=0;i<n-1;i++)
{
temp=arr[i];
flag=i;
for(j=i+1;j<n;j++)
{
if(arr[j]<temp)
{
temp=arr[j];
flag=j;
}
}
if(flag!=i)
{
arr[flag]=arr[i];
arr[i]=temp;
}
}
}
3、插入排序
void InsertSort(int *a,int n)
{
int i,j,temp;
for(i=1;i<n;i++)
{
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 Merge(int *arr,int p,int q,int r)
{
int i,j,k,n1,n2;
n1=q-p+1;
n2=r-q;
int *L=new int[n1];
int *R=new int[n2];
for(i=0,k=p;i<n1;i++,k++)
L[i]=arr[k];
for(i=0,k=q+1;i<n2;i++,k++)
R[i]=arr[k];
for(i=0,j=0,k=p;i<n1&&j<n2;k++)
{
if(L[i]<R[j])
{
arr[k]=L[i];
i++;
}
else
{
arr[k]=R[j];
j++;
}
}
if(i<n1)
{
for(j=i;j<n1;j++,k++)
arr[k]=L[j];
}
if(j<n2)
{
for(i=j;i<n2;i++,k++)
arr[k]=R[i];
}
}
void MergeSort(int *arr,int p,int r)
{
if(p<r)
{
int q=(p+r)/2;
MergeSort(arr,p,q);
MergeSort(arr,q+1,r);
Merge(arr,p,q,r);
}
}
5、快速排序
int FindPos(int *a,int left,int right)
{
int val=a[left];
while(left<right)
{
while(left<right && a[right]>=val)
right--;
a[left]=a[right];
while(left<right && a[left]<=val)
left++;
a[right]=a[left];
}
a[left]=val;
return left;
}
void QuickSort(int *a,int left,int right)
{
if(left<right)
{
int pos=FindPos(a,left,right);
QuickSort(a,left,pos);
QuickSort(a,pos+1,right);
}
}
6、希尔排序
void ShellSort(int *a,int n)
{
int i,j,h;
int temp;
for(h=n/2;h>0;h=h/2)
{
for(i=h;i<n;i++)
{
temp=a[i];
for(j=i-h;j>=0;j-=h)
{
if(a[j]>temp)
{
a[j+h]=a[j];
}
else
break;
}
a[j+h]=temp;
}
}
}
void BubbleSort(int *arr,int n)
{
int i,j;
int tem;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
{
if(arr[j+1]<arr[j])
{
tem=arr[j+1];
arr[j+1]=arr[j];
arr[j]=tem;
}
}
}
2、选择排序
void SelectSort(int arr[],int n)
{
int i,j;
int temp,flag=0;
for(i=0;i<n-1;i++)
{
temp=arr[i];
flag=i;
for(j=i+1;j<n;j++)
{
if(arr[j]<temp)
{
temp=arr[j];
flag=j;
}
}
if(flag!=i)
{
arr[flag]=arr[i];
arr[i]=temp;
}
}
}
3、插入排序
void InsertSort(int *a,int n)
{
int i,j,temp;
for(i=1;i<n;i++)
{
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 Merge(int *arr,int p,int q,int r)
{
int i,j,k,n1,n2;
n1=q-p+1;
n2=r-q;
int *L=new int[n1];
int *R=new int[n2];
for(i=0,k=p;i<n1;i++,k++)
L[i]=arr[k];
for(i=0,k=q+1;i<n2;i++,k++)
R[i]=arr[k];
for(i=0,j=0,k=p;i<n1&&j<n2;k++)
{
if(L[i]<R[j])
{
arr[k]=L[i];
i++;
}
else
{
arr[k]=R[j];
j++;
}
}
if(i<n1)
{
for(j=i;j<n1;j++,k++)
arr[k]=L[j];
}
if(j<n2)
{
for(i=j;i<n2;i++,k++)
arr[k]=R[i];
}
}
void MergeSort(int *arr,int p,int r)
{
if(p<r)
{
int q=(p+r)/2;
MergeSort(arr,p,q);
MergeSort(arr,q+1,r);
Merge(arr,p,q,r);
}
}
5、快速排序
int FindPos(int *a,int left,int right)
{
int val=a[left];
while(left<right)
{
while(left<right && a[right]>=val)
right--;
a[left]=a[right];
while(left<right && a[left]<=val)
left++;
a[right]=a[left];
}
a[left]=val;
return left;
}
void QuickSort(int *a,int left,int right)
{
if(left<right)
{
int pos=FindPos(a,left,right);
QuickSort(a,left,pos);
QuickSort(a,pos+1,right);
}
}
6、希尔排序
void ShellSort(int *a,int n)
{
int i,j,h;
int temp;
for(h=n/2;h>0;h=h/2)
{
for(i=h;i<n;i++)
{
temp=a[i];
for(j=i-h;j>=0;j-=h)
{
if(a[j]>temp)
{
a[j+h]=a[j];
}
else
break;
}
a[j+h]=temp;
}
}
}