《数据结构与算法分析》1

    第一章引论中第一个问题,一组N个数而要确定其中第K个最大者。

    书中提到了两个简单的解决方法,分别是冒泡算法和把前K个数插入到数组中。

    一下是我的代码。

    冒泡算法:

    int main()
    {
int a[10]={5,6,2,3,8,7,9,4,5,2};
int b;
int k;
for(int i=0;i<9;i++)
{
   for(int n=0;n<9-i;n++)
{
   if(a[n]<=a[n+1])
{
  b=a[n];
  a[n]=a[n+1];
  a[n+1]=b;
}
}
}
for(int i=0;i<9;i++)
{
   cout<<a[i];
}
cout<<endl;
cin>>k;
cout<<a[k-1];
    return 0;

    }

    插入算法:

    #include<iostream>
    using namespace std;
    int main()
    {
int a[10]={5,6,2,3,8,7,9,4,5,2};
int b[4]={0,0,0,0};
for(int i=0;i<10;i++)
{   
int n=0;
   while(a[i]>b[n])              //寻找位置
{
   if(n<4)                   //不超出范围
{
   n++;
}
else
{
   break;
}
}
if(n!=0)
{
   for(int m=0;m<n-1;m++)
{
   b[m]=b[m+1];
}
b[n-1]=a[i];
}
}
    printf("%d %d %d %d",b[0],b[1],b[2],b[3]);
            return 0;

      }

    在做第一个算法的时候过程比较顺利可能是用得多的原因,而在做第二个算法的时候插入需要的把数组往后推这个动作就有点模糊了,因为我之前从来没做过用数组来进行插入和位置改变的代码。

     书中提到的,如果是100万个元素进行排序,那么这两个算法都要用若干天才能完成,而将在第7章中会讨论一种能够一秒给出答案的算法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值