• 堆的建立,插入和自动排序


    在网上看的代码基本上都是这样的:

    #include<iostream>
    using namespace std;
    
    void MakeHeap (int a[], int n);
    
    int
    main ()
    {
      int a[100];
      int n, i;
    
      cout << "Enter the number:" << endl;
      cin >> n;
    
      for (i = 1; i <= n; i++)
        {
          cout << "Enter the element of the Heap:" << endl;
          cin >> a[i];
        }
    
      MakeHeap (a, n);
    
      cout << "The Heap is:" << endl;
      for (i = 1; i <= n; i++)
        {
          cout << a[i] << " ";
        }
    
      cout << endl;
    
      return 1;
    }
    
    void
    MakeHeap (int a[], int n)
    {
      int i, j, flag;
    
      for (i = n / 2; i >= 1; i--)
        {
          j = 2 * i;
          if (a[j] <= a[j + 1])
        j++;
          if (a[i] < a[j])
        {
          flag = a[i];
          a[i] = a[j];
          a[j] = flag;
        }
        }
    }
    



    但是我总感觉不太对,所以就拿这个运行了一下,结果真的是错的,他这里只是实现了一步而已。也许是我没搞明白他的意思吧。

    所以我自己实现了一个简单的,没考虑算法复杂度(特别是堆的建立,堆的排序还是挺简单的)。

    #include<iostream>
    using namespace std;
    
    int data[100];
    int count;
    void printList(int data[],int length)
    {
    	int i;
    	for(i=0;i<length;i++)
    	{
    		cout<<data[i]<<" ";
    	}
    	cout<<endl;
    }
    
    void swap(int& first,int& second )
    {
    	int temp=first;
    	first=second;
    	second=temp;
    }
    
    void HeapSort(int* data,int position)
    {
    	if(position<=0)
    		return;
    	if(data[position]>data[(position-1)/2])
    	{
    		swap(data[position],data[(position-1)/2]);
    		HeapSort(data,(position-1)/2);
    	}
    }
    
    void insert(int* data,int value)
    {
    	data[count++]=value;
    	HeapSort(data,count-1);
    }
    
    void BuildBigHeap(int* data,int size)
    {
    	bool isChange=true;
    	while(isChange)
    	{
    		isChange=false;
    		int i;
    		for(i=(size-2)/2;i>=0;i--)
    		{
    			int j=2*i+1;
    			if(data[j]<data[j+1])
    				j++;
    			if(data[i]<data[j])
    			{
    				swap(data[i],data[j]);
    				isChange=true;
    			}
    		}
    	}	
    }
    void main()
    {	
    	cout<<"请输入count的值:";
    	cin>>count;
    	cout<<endl;
    	int i;
    	for(i=0;i<count;i++)
    	{
    		cout<<"请输入第"<<i<<"个值: ";
    		cin>>data[i];
    		cout<<endl;
    	}
    	printList(data,count);
    
    	BuildBigHeap(data,count);
    	printList(data,count);
    
    	insert(data,7);
    	printList(data,count);
    	return;
    }
    



  • 相关阅读:
    【Prince2科普】Prince2七大主题之概论
    浅谈PRINCE2和PMP体系架构有何区别?
    Prince2是怎么考试的?
    Reporting Service服务SharePoint集成模式安装配置(3、4、安装sharepoint 2010必备组件及产品)
    Reporting Service服务SharePoint集成模式安装配置(1、虚拟机+ 2、AD域环境配置)
    DB2 添加license
    db2中临时表在存储过程中的使用
    DB2 函数快速构造测试数据
    db2 中 SQL判断物理表是否存在、修改表名
    DB2触发器简单例子
  • 原文地址:https://www.cnblogs.com/james1207/p/3297354.html
Copyright © 2020-2023  润新知