拓扑排序, 快速排序, 冒泡排序, 堆排序, 二分查找

//拓扑排序
#include <cstdlib>
#include <iostream>
#include <stack>
using namespace std;
stack<int>mystack;
struct node
{
        int adjvex;
        node *next;
};
int indegree[9999];
int create(node adj[], int n, int m)
{
    node *p;
    for(int i = 0; i< n; i++)
    {
            adj[i].adjvex = i;
            adj[i].next = NULL;
    }
    for(int i = 0; i< m; i++)
    {
            int u,v;
            cin>> u >>v;
            p = newnode;
            p->adjvex = v;
            p->next = adj[u].next;
            adj[u].next = p;
    }
    return 1;
}
void print(node adj[], int n)
{
      inti;
      node*p;
      for(int i = 0; i < n; i++)
      {
              p = adj[i].next;
              while(p != NULL)
              {
                      cout<< p->adjvex<< " ";
                      p =p->next;
              }
              cout << endl;
      }
}
void topsort(node adj[], int n)
{
      node*p;
      memset(indegree, 0, sizeof(indegree));
      for(int i = 0; i < n; i++)
      {
              p = adj[i].next;
              while(p != NULL)
              {
                      indegree[p->adjvex]++;
                      p =p->next;
              }
      }
      for(int i = 0; i < n; i++)
      {
              if(indegree[i] == 0)
                            mystack.push(i);
      }
      intcount = 0;
      while(mystack.size() != 0)
      {
                          int i = mystack.top();
                          mystack.pop();
                          cout << i<< " ";
                          count++;
                          for(p = adj[i].next; p != NULL; p =p->next)
                          {
                                int k = p->adjvex;
                                indegree[k]--;
                                if(indegree[k] == 0)
                                                mystack.push(k);
                          }
      }
      cout<< endl;
      if(count < n)
              cout << "有回路"<< endl;            
}
int main(int argc, char *argv[])
{
    int n;
    int m;
    cin>> n >>m;
    node adj[9999];
    create(adj, n, m);
    cout<< endl;
    print(adj, n);
    cout<< endl;
    topsort(adj, n);
    system("PAUSE");
    returnEXIT_SUCCESS;
}

//快速排序
#include <cstdlib>
#include <iostream>

using namespace std;

int partition(int a[], int low, int high)
{
    int p = low;
    int i = low-1;
    int end = high;
    int temp;
    for(int j = p; j< end; j++)
    {
            if(a[j]<= a[end])
                 
                    i++;
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
            }
    }
    temp = a[i+1];
    a[i+1] = a[end];
    a[end] = temp;
    return i+1;
}
                 
void quicksort(int a[], int low, int high)
{
      intmark;
      if(low< high)
      {
            mark =partition(a, low, high);
            quicksort(a, low, mark-1);
            quicksort(a, mark+1, high);
      }
}          
           

int main(int argc, char *argv[])
{
    int a[8] ={49,38,65,97,76,13,27,49};
    quicksort(a, 0,7);
    for(int i = 0; i< 8; i++)
        cout << a[i]<< " ";
    system("PAUSE");
    returnEXIT_SUCCESS;
}


//冒泡排序
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int a[8] ={49,38,65,97,76,13,27,49};
    int n = 8;
    int temp;
    for(int i = 1; i< n; i++)
            for(int j= 0; j < n-i; j++)
            {
                    if(a[j] > a[j+1])
                    {
                            temp = a[j];
                            a[j] = a[j+1];
                            a[j+1] = temp;
                    }
                         
    for(int i = 0; i< 8; i++)
        cout << a[i]<< " ";
    system("PAUSE");
    returnEXIT_SUCCESS;
}

//堆排序
#include <cstdlib>
#include <iostream>
using namespace std;
void Maxheapify(int A[], int i, int len)
{
      int l= 2*i+1, r = 2*i+2;
      intlargest;
      inttemp;
      if(l<= len && A[l]> A[i])
          largest = l;
      else
          largest = i;
      if(r<= len && A[r]> A[largest])
          largest = r;
      if(largest != i)
      {
              temp = A[largest];
              A[largest] = A[i];
              A[i] = temp;
              Maxheapify(A, largest, len); 
      }
}
int main()
{
    int A[100] = {49, 38,65, 97, 76, 13, 27};
    int B[100];
    int n = 6;
    for(int i = (n-1)/2; i>= 0; i--)
            Maxheapify(A, i, n);
    for(int i = 0; i<= 6; i++)
            cout<< A[i]<< " ";
    cout<< endl;
    for(int i = 0; i<= 6; i++)
    {
            B[i] =A[0];
            A[0] =A[n];
            n--;
            Maxheapify(A, 0, n); 
    }      
    for(int i = 0; i<= 6; i++)
            cout<< B[i]<< " ";  
    system("pause");
    return 0;

//二分查找(迭代)
#include <cstdlib>
#include <iostream>
using namespace std;
int search(int a[], int low, int high, int find)
{
        bool mark = true;
        while(low <= high)
        {
            int mid =(low+high)/2;
            if(find ==a[mid])
                    return mid;
            if(find< a[mid])
                    high = mid-1;
            else
                low = mid+1;
        }
        mark = false;
        return mark;
}
int main(int argc, char *argv[])
{
    int a[100] ={2,4,9,20,40,99,200};
    int find = 41;
    int low = 0;
    int high = 6;
    if(search(a, low, high,find))
                  cout<< search(a, low, high, find)<< endl;
    else 
          cout<< "Can't find"<< endl;
    system("PAUSE");
    returnEXIT_SUCCESS;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值