#include <stdio.h>
#include <stdlib.h>
//希尔排序
void shellsort(int a[],int n)
{
int d,i,j,t;
for(d=n/2;d>=1;d=d/2)//shell排序要选择有多少队:以n/2^n依次求出d的值并排队
for(i=0+d;i<n;i++)//i初始值为d,有0-(d-1)个队,i则为d-n依次扫描
{
t=a[i];//创建一个t存储需要插入的值
for(j=i-d;j>=0&&a[j]>t;j=j-d)//j为0-d-1中任意值
a[j+d]=a[j];
a[j+d]=t;
}
}
//快速排序
void QuickSort(int a[],int L,int H)
{
int i,j,x; i=L;j=H;x=a[i];
if(L>=H)return;
while(i<j)
{
while(i<j&&a[j]>=x)j--; if(i<j){a[i]=a[j];i++;}
while(i<j&&a[i]<=x)i++; if(i<j){a[j]=a[i];j--;}
}
a[i]=x;
QuickSort(a,L,j-1);QuickSort(a,j+1,H);
}
//冒泡排序
void BubbleSort(int a[],int n)
{
int i,j,t,tag;
for(i=n-1;i>0;i--)
{
tag=0;
for(j=0;j<i;j++)
if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;tag=1;}
if(tag==0) break;
}
}
//直接排序
void ZJInsertSort(int a[],int n)
{
int i,j,t;
for(i=1;i<n;i++)
{
t=a[i];
for(j=i-1;i>=0&&a[j]>t;j--)
a[j+1]=a[j];
a[j+1]=t;
}
}
//直接选择排序
void ZJSelectSort(int a[],int n)
{
int i,t,min,j;
for(i=0;i<n-1;i++)
{
min=i;
for(j=i+1;j<n;j++)
if(a[j]<a[min]) min=j;//出现新的最小值将min标签转移
t=a[i];a[i]=a[min];a[min]=t;
}
}
void printZS(int a[],int n)
{
int i;
for(i=1;i<n;i++)
printf("%d ",a[i]);
}
int main()
{
int a[]={1,6,7,2,0,9,3,4,5};
ZJSelectSort(a,9);
printZS(a,9);
}
-----------------------------------------------------------------排序--------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define newbtree (btree *)malloc(sizeof(btree))
//二叉排序树创建与打印
typedef struct k
{
int data;
struct k *L,*R;
}btree;
btree *creat()
{
btree *t=NULL,*p=NULL,*f=NULL,*pre=NULL;int x;
printf("输入结点以-1结束:");
scanf("%d",&x);
while(x!=-1)
{
f=t;
while(f)
{
pre=f;
f=(x<f->data)?f->L:f->R;
}
p=newbtree; p->data=x; p->L=p->R=NULL;
if(t=NULL)t=p;
else if(x<pre->data)pre->L=p;
else pre->R=p;
scanf("%d",&x);
}
return t;
}
void inprint(btree *t)
{
if(t=NULL)return; inprint(t->L);
printf("%3d",t->data); inprint(t->R);
}
int main()
{
btree*t; t=creat();
printf("\n");inprint(t);
}
----------------------------------------------------二叉排序树----