#define Maxsize 300
#include <iostream>
#include <fstream>
using namespace std;
int a[Maxsize];
int num=0;//数字个数
//从文件中读取数据
void Get()
{
fstream file;
file.open("data.txt",ios::in);
if(!file.good())
{
cout<<"文件打开失败"<<endl;
exit(1);
}
file>>num;
for(int i=1;i<=num;i++)
{
file>>a[i];
}//留a[0]做临时空间
file.close();
}
void Print()
{
for(int i=1;i<=num;i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
}
//选择排序
void Select()
{
for(int i=1;i<=num;i++)
{
a[0]=a[i];//记录最小值
int t=0;//最小下标
for(int j=i+1;j<=num;j++)
{
if(a[j]<a[0])
{
t=j;
a[0]=a[j];
}
}
a[t]=a[i];
a[i]=a[0];
}
Print();
}
//堆排序
void Heapify(int low,int high)
{
a[0]=a[low];
int i=low;
int j=i*2;
while(j<=high)
{
if(j+1<=high&&a[j]<a[j+1])
{
j++;
}
if(a[j]>a[0])
{
a[i]=a[j];
i=j;
j=i*2;
}
else
{
break;
}
}
a[i]=a[0];
}
void HeapSort()
{
for(int i=num/2;i>=1;i--)
{
Heapify(i,num);
}
for(int i=num;i>1;i--)
{
a[0]=a[i];
a[i]=a[1];
a[1]=a[0];
Heapify(1,i-1);
}
}
int main()
{
Get();
//Select();
HeapSort();
Print();
return 0;
}
排序之选择排序(简单选择排序+堆排序)
最新推荐文章于 2024-10-09 22:28:58 发布