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);
}
}