您的位置:首页 > 其它

ACM经典算法之排序/查找

2015-08-18 22:49 351 查看
转自:http://blog.sina.com.cn/s/blog_93d2ceba010145er.html

一、(快速排序)

语法: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);

}
二、(希尔排序)

语法: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;

}

}
三、(选择法排序)

语法: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;

}

}
四、(二分查找)

语法: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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: