一.插入排序
1.直接插入排序
void insertsort(int r[],int n)
{
int i,j;
for(i=2;i<=n;i++)
{
r[0]=r[i];
for(j=i-1;j>0&&r[0]<r[j];j--)
{
r[j+1]=r[j];
}
r[j+1]=r[0];
}
}
2.希尔排序
void shellsort(int r[],int n)
{
int d,i,j,temp;
for(d=n/2;d>=1;d=d/2)
{
for(i=d+1;i<=n;i++)
{
temp=r[i];
for(j=i-d;j>0&&temp<r[j];j=j-d)
r[j+d]=r[j];
r[j+d]=temp;
}
}
}
二.交换排序
1.起泡排序
void bubblesort(int r[],int n)
{
int j,exchange,bound,temp;
exchange=n;
while(exchange!=1)
{
bound=exchange;
exchange=1;
for(j=1;j<=bound;j++)
{
if(r[j]>r[j+1])
{
swap(r[j],r[j+1]);
exchange=j;
}
}
}
}
2.希尔排序
int Partition(int r[],int f,int l)
{
int i=f,j=l,t;
while(i<j)
{
while(i<j&&r[i]<=r[j]) j--;
if(i<j){
swap(r[i],r[j]);
i++;
}
while(i<j&&r[i]<=r[j]) i++;
if(i<j){
swap(r[i],r[j]);
j--;
}
}
return i;
}
void quicksort(int r[],int f,int l)
{
if(f>=l) return ;
else {
int p=Partition(r,f,l);
quicksort(r,f,p-1);
quicksort(r,p+1,l);
}
}
三.选择排序
1.简单选择排序
void SelectSort(int a[], int n) {
int i, j, small;
for (i = 0; i < n-1; ++i) {
small = i;
for (j = i+1; j < n; ++j) {
if (a[small] > a[j]) small = j;
}
if (small != i)
swap(a[small], a[i]);
}
}
堆排序
void HeapAdjust(int a[], int s, int n)
{
int j;
while(2*s + 1 < n)
{
j=2*s + 1 ;
if((j+1) < n)
{
if(a[j] < a[j+1])
j++;
}
if(a[s] < a[j])
{
swap(a[s], a[j]);
s = j ;
}
else
break;
}
}
void HeapSort(int a[],int n)
{
int t, i;
int j;
for(i = n/2 - 1; i >= 0; i--)
HeapAdjust(a, i, n);
for(i = n-1; i > 0; i--)
{
swap(a[0], a[i]);
HeapAdjust(a, 0, i);
}
}
|