#include <cstdio>
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 1001;
int n,s[maxn],heap[maxn];
void downAdjust(int low,int high)
{
int i = low,j = i*2;
while(j<=high)
{
if(j+1 <= high && heap[j] < heap[j+1])
swap(heap[j],heap[j+1]);
if(heap[j] > heap[i])
{
swap(heap[j],heap[i]);
i = j;
j = i*2;
}
else
break;
}
}
void creatHeap()
{
for(int i = n/2;i>0;i--)
{
downAdjust(i,n);
}
}
void heapSort()
{
creatHeap();
for(int i = n;i>0;i--)
{
swap(heap[1],heap[i]);
downAdjust(1,i-1);
}
}
void bubbleSort()
{
for(int j = n - 1;j>0;j--)
{
int flag = 0;
for(int i = 0;i<j;i++)
{
if(s[i]>s[i+1])
{
swap(s[i],s[i+1]);
flag = 1;
}
}
if(flag == 0) break;
}
}
void inserSort()
{
int j;
for(int i = 1;i<n;i++)
{
int temp = s[i];
for(j = i;j>0 && s[j-1] > temp;j--)
{
s[j] = s[j-1];
}
s[j] = temp;
}
}
void mergeN(int a[],int l1,int r1,int l2,int r2)
{
int i = l1,j=l2;
int temp[maxn],ind = 1;
while(i <= r1 && j <= r2)
{
if(a[i] > a[j])
temp[ind++] = a[j++];
else
temp[ind++] = a[i++];
}
while(i <= r1) temp[ind++] = a[i++];
while(j <= r2) temp[ind++] = a[j++];
for(int k = 1;k<ind;k++)
{
a[l1 + k - 1] = temp[k];
}
}
void mergesort(int l,int r,int a[])
{
if(l < r)
{
int mid = (l + r)/ 2;
mergesort(l,mid,a);
mergesort(mid+1,r,a);
mergeN(a,l,mid,mid+1,r);
}
}
void Merge() //归并简单实现
{
vector<int>temp;
temp = origin;
int flag = 0 ;
for(int i = 2;i / 2< n;i*=2)
{
for(int j = 0;j<n;j+=i)
{
sort(temp.begin()+j,temp.begin()+min(j+i,n));
}
}
}
int main()
{
freopen("1.txt","r",stdin);
scanf("%d",&n);
for(int i = 1;i<=n;i++)
scanf("%d",&heap[i]);
// inserSort();
// bubbleSort();
// heapSort();
mergesort(1,n,heap);
for(int i = 1;i<=n;i++)
printf("%d",heap[i]);
return 0;
}
冒泡、插入、堆排序、归并整理
最新推荐文章于 2023-10-10 09:33:08 发布