观《啊哈算法》,积累代码(c++实现)

来源:互联网 发布:免费弄lol网吧特权mac 编辑:程序博客网 时间:2024/05/20 12:47

桶算法之简化版:

//桶排序的算法1#include<iostream>using namespace std;int main(){    int a[11]={},t;//在0~10里定义一个位置    for(int i=1;i<=10;i=i+1)    {        cin>>t;        a[t]++;//输入某个某个数,这个数所对应的位置就+1    }    for(int j=0;j<10;j=j+1)        for(int k=0;k<a[j];k=k+1)            cout<<j<<" ";//按照次序输出,将for语句修改着可以倒叙输出    return 0;    }//输入:4 5 2 6 8 3 6 3 1 8//输出:1 2 3 3 4 5 6 6 8 8//这道题的局限在于,比较适合于比较小的数字,对于更大一些的数字,这个算法则不太合理,但是对于小范围却数量极大的数字,则非常奏效。

快速算法(占用空间小,输出快):

//排序算法的改进版本————快速排序c++实现#include<iostream>using namespace std;int a[101];void quicksort(int left,int right);int main(){    int i,n;    cin>>n;//输入要排序的数的个数    for(i=1;i<=n;i++)        cin>>a[i];//依次输入要排序的数,中间要加空格    quicksort(1,n);//用函数进行快速排序    for(i=1;i<=n;i++)        cout<<a[i]<<" ";    return 0;}void quicksort(int left,int right){    int i,j,t,temp;    if(left>right)        return;//确保右边的数字要大于左边的数字,排查错误    temp=a[left];    i=left;    j=right;    while(i!=j)    {        while(a[j]>=temp && i<j)//顺序很重要,一定要从j开始玩前移动            j--;        while(a[i]<=temp && i<j)            i++;        if(i<j)//这里实现两者之间的交换        {            t=a[i];            a[i]=a[j];            a[j]=t;        }    }//再把基准数进行交换    a[left]=a[i];    a[i]=temp;    quicksort(left,i-1);//递归,左右两边再进行同样的操作    quicksort(i+1,right);    return;}//输入:10//     6 1 2 7 9 3 4 5 10 8//输出:1 2 3 4 5 6 7 8 9 10



队列:

//要实现的内容,对于遗传数字:631758924.首先将第一个数删除,紧接着将第二个数放到这串数的末尾,再将第三个数删除并将第四个数放到这串数的末尾。。。直到剩下最后一个数,将最后一个数也删除。按照刚才的顺序,把这些删除的数连在一起#include<iostream>using namespace std;int main(){    int q[101]={6,3,1,7,5,8,9,2,4},head,tail;//初始化队列    head=0;    tail=9;    while(head<tail)    {        cout<<q[head];//打印队首并将队首出队        head++;        q[tail]=q[head];//先将新对手的数添加到队尾        tail++;        head++;//再将队首出列    }    return 0;}//输出:615947283//本题用到叫队列的算法!!!




1 0