第一章引论中第一个问题,一组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章中会讨论一种能够一秒给出答案的算法。