主题:关于查找与排序实验
川师无名学子
[专家分:0] 发布于 2006-05-17 11:00:00
正在垂死挣扎的我求求个位大侠了,教我一下下面这两个算法:
1) 实现二分查找算法,并计算相应的ASL。
2) 实现插入排序或选择排序算法。
在下感激涕漓,鼎礼膜拜
回复列表 (共4个回复)
沙发
findlyhl [专家分:280] 发布于 2006-05-17 15:50:00
这个是插入和选择排序
//1.插入排序
void insertsort(int K[],int n)
{
int i,j,temp;
for(i = 1; i < n; i++)
{
temp = K[i]; //将被插入元素K[i]保存在temp中
j = i-1;
while(temp < K[j] && j >= 0)
K[j+1] = K[j--];
K[j+1] = temp;
}
}
//2.选择排序
void selectsort(int K[],int n)
{
int i,j,temp,d;
for(i = 0 ; i < n-1; i++)
{
d = i; //假设最小元素为未排序的第一个元素
for( j = i+1; j < n; j++)
if(K[j] < K[d])
d = j; //寻找真正的最小值
if(d != i)
{
temp = K[d];
K[d] = K[i];
K[i] = temp;
}
}
}
[em1]
板凳
findlyhl [专家分:280] 发布于 2006-05-17 15:50:00
二分查找算法(递归算法):
int bin_search(keytype key[],int low,int high,keytype k)
{
int mid;
if(low > high)
return 0;
else
{
mid = (high+low)/2;
if(key[mid] == k)
return mid;
if(k > key[mid])
return bin_search(key,mid+1,high,k);
else
return bin_search(key,low,mid-1,k);
}
}
3 楼
川师无名学子 [专家分:0] 发布于 2006-05-17 21:46:00
非常感谢!!!
4 楼
川师无名学子 [专家分:0] 发布于 2006-05-17 21:47:00
我现在还有一个"1"的算法:
#include<iostream>
using namespace std;
typedef struct{
int elem[100];
int length;
}SSTable;
void creat(SSTable &ST)
{int num;
cin>>num;
ST.length=num;
cout<<"输入表的元素:\n";
int i,k;
for(i=1;i<=num;i++)
{ cout<<"第"<<i<<"个元素:";
cin>>k;
ST.elem[i]=k;}
}
void show(SSTable &ST){
int i;
cout<<"该序列为:\n";
for(i=1;i<=ST.length;i++)
cout<<ST.elem[i]<<"";
cout<<endl;}
int Search_Bin ( SSTable &ST, int key ) { // 算法9.2
// 在有序表ST中折半查找其关键字等于key的数据元素。
// 若找到,则函数值为该元素在表中的位置,否则为0。
int low, high, mid;
low = 1; high = ST.length; // 置区间初值
while (low <= high) {
mid = (low + high) / 2;
if (key==ST.elem[mid]) return mid; // 找到待查元素
else if (key<ST.elem[mid]) high = mid - 1;
// 继续在前半区间进行查找
else low = mid + 1; // 继续在后半区间进行查找
}
return 0; // 顺序表中不存在待查元素
} // Search_Bin
void main()
{ SSTable t;int key,mid;
cout<<"输入表的长度:";
creat(t);
show(t);
cout<<"输入要查找的元素:";cin>>key;
mid=Search_Bin(t,key);
if(mid==0) cout<<"顺序表中不存在待查元素\n";
else cout<<key<<"已经查到,"<<"在表中第"<<mid<<"位";
}
我来回复