#include <iostream>
#include <stdlib.h>
#include <cstring>
#include <math.h>
using namespace std;
#define N 100
typedef struct
{
int data[N];
int length;//線性表的長度
}List;
int InitList(List& L)
{
memset(L.data, 0, sizeof(L));//初始化資料為0
L.length = 0; //初始化長度為0
return 0;
}
//創建順序表函式
bool CreateList(List& L, int n)
{
if (n<0 || n>N)
return false;//n非法
cout<<"請依次輸入關鍵字:"<<endl;
for (int i = 0; i < n; i++)
{
cin>>L.data[i];
L.length++;
}
return true;
}
void Bitree(List&L,int n)
{
for(int i=L.data[0];i>=1;i--)
{
int k=(int)pow(2,i);
for(int j=k;j<=(int)pow(2,i+1)-1&&j<=k+n-1;j+=2)
{
L.data[(j+1)/2]=L.data[j];
if(L.data[j]>L.data[j+1]&&j<k+n-1)
L.data[(j+1)/2]=L.data[j+1];
}
}
L.data[0]=(int)pow(2,L.data[0])+n-1;
}
void Sort(List&L,int n)
{
for(int i=1;i<=n;i++)
{
cout<<L.data[1]<<endl;
int j=1;
while(L.data[2*j]==L.data[1]||L.data[2*j+1]==L.data[1])
{
j*=2;
if(L.data[j]!=L.data[1])
j++;
}
L.data[j]=65535;
//調整
for(int k=j;k>0;k/=2)
{
if(k%2)
j=L.data[k-1];
else
j=L.data[k+1];
if(j<L.data[k])
L.data[k/2]=j;
else
L.data[k/2]=L.data[k];
}
}
}
void display(List&L)
{
cout<<"排序后的結果:"<<endl;
for (int i = 0; i < L.length; i++)
{
cout<<L.data[i]<<" ";
}
cout<<endl;
}
int main()
{
int n;
List L;
InitList(L);
cout<<"請輸入元素個數:"<<endl;
cin>>n;
CreateList(L,n);
Bitree(L,n);
Sort(L,n);
display(L);
return 0;
}
基于順序表結構的樹形選擇排序,但是輸不出答案,不知道是哪里出了問題?求助
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/239813.html
標籤:模式及實現
上一篇:大佬們,求代碼
