1. 插入类排序
1.1 直接插入排序
void InsertSort(int R[ ], int n)
{
int i, j;
int temp;
for (i=1;i<n;++i)
{
temp=R[i];
j=i-1;
while (j>0 && temp<R[j])
{
R[j+1]=R[j];
--j;
}
R[j+1]=temp;
}
}
1.2 折半插入排序
1.3 希尔排序
2. 交换类排序
2.1 气泡排序
void BubbleSort(int R[ ], int n)
{
int i,j,flag; int temp;
for(i=n-1;i>=1;--i)
{
flag=0;
for(j=1;j<=i;++j)
if(R[j-1]>R[j])
{
temp=R[j];
R[j]=R[j-1];
R[j-1]=temp;
flag=1;
}
if(flag==0)
return;
}
}
2.2 快速排序
void QuickSort(int R[ ], int low, int high)
{
int temp;
int i=low, j=high;
if(low<high)
{
temp=R[low];
while(i<j)
{
while(j>i&&R[j]>=temp) --j;
if(i<j)
{
R[i]=R[j];
++i;
}
while(i<j&&R[i]<temp) ++i;
if(i<j)
{
R[j]=R[i];
--j;
}
}
R[i]=temp;
QuickSort(R, low, i-1);
QuickSort(R, i+1, high);
}
}
3. 选择类排序
3.1 简单选择类排序
void SelectSort(int R[ ], int n)
{
int i,j,k;
int temp;
for(i=0;i<n;++i)
{
k=i;
for (j=i+1;j<n;++j)
if(R[k]>R[j])
k=j;
temp=R[i];
R[i]=R[k];
R[k]=temp;
}
}
4. 堆排序
void Sift(int R[],int low,int high)
{
int i=low, j=2*i;
int temp=R[i];
while(j<=high)
{
if(j<high&&R[j]<R[j+1])
++j;
if(temp<R[j])
{
R[i]=R[j];
i=j;
j=2*i;
}
else
break;
}
R[i]=temp;
}
void heapSort(int R[ ], int n)
{
int i;
int temp;
for(i=n/2;i>=1;--i)
Sift(R,i,n);
for(i=n;i>=2;--i)
{
temp=R[1];
R[1]=R[i];
R[i]=temp;
Sift(R,1,i-1);
}
}
5. 二路归并排序
void mergeSort(int A[], int low, int high)
{
if(low<high)
{
int mid=(low+high)/2
mergeSort(A,low,mid);
mergeSort(A,mid+1,high);
merge(A,low,mid,high);
}
}