六、排序/查找
1.快速排序
语法:
quicksort(int l,int r,int b[]);
参数:
l:排序上界,开始时l=0
r:排序下界,开始时r=数组元素个数
b[]:被排序的元素
返回值:
null
注意:
输出升序序列
源程序:
void quicksort(int l,int r,int b[])
{
int i,j,x;
if(l>=r) return;
i=l;
j=r;
x=b[i];
while(i!=j)
{
while(b[j]>x&&j>i) j--;
if(i<j)
{
b[i]=b[j];
i++;
}
while(b[i]<x&&j>i)i++;
if(i<j)
{
b[j]=b[i];
j--;
}
}
b[i]=x;
quicksort(l,j-1,b);
quicksort(i+1,r,b);
}
2.希尔排序
语法:
shellsort(int a[],int n);
参数:
n:数组元素个数
a[]:待排序数组
返回值:
null
注意:
输出升序序列
源程序:
void shellsort(int a[],int n)
{
int i,j,g;
int temp,k;
g=n/2;
while(g!=0)
{
for(i=g+1;i<=n;i++)
{
temp=a[i];
j=i-g;
while(j>0)
{
k=j+g;
if(a[j]<=a[k])
j=0;
else
{
temp=a[j];a[j]=a[k];a[k]=temp;
}
j=j-g;
}
}
g=g/2;
}
}
3.选择法排序
语法:
sort(int t[],int n);
参数:
t[]:待排序数组
n:数组t[]元素的个数
返回值:
null
注意:
输出升序序列
小规模排序用
源程序:
void sort(int t[],int n)
{
int i,j,k,temp;
for (i=0;i<n;i++)
{
k=i;
for (j=i;j<n;j++) if (t[j]<t[k]) k=j;
temp=t[i];t[i]=t[k];t[k]=temp;
}
}
4.二分查找
语法:
result=search_bin(int *t,int k);
参数:
t[]:待查找数组
k:查找关键字
返回值:
如果k在t[]中存在,输出i:t[i]=k,否则输出-1
注意:
要求查找数组是有序升序序列
源程序:
int search_bin(int *t,int k)
{
int low=1,high=10,mid;
while (low<=high)
{
mid=(low+high)/2;
if (k==t[mid]) return mid;
else if (k<t[mid]) high=mid-1;
else low=mid+1;
}
return -1;
}