回 帖 发 新 帖 刷新版面

主题:关于查找与排序实验

正在垂死挣扎的我求求个位大侠了,教我一下下面这两个算法:
1)    实现二分查找算法,并计算相应的ASL。
2)    实现插入排序或选择排序算法。
在下感激涕漓,鼎礼膜拜

回复列表 (共4个回复)

沙发

这个是插入和选择排序
//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]

板凳

二分查找算法(递归算法):
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 楼

非常感谢!!!

4 楼

我现在还有一个"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<<"位";
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册