堆排序都快不会写了。。。加油啊。。。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
void adjust(int *num, int x, int endd)
{
int bigger = x;
if(2*x + 1 > endd)
return;
bigger = 2*x + 1;
if(bigger + 1 <= endd)
{
if(num[bigger] < num[bigger+1])
bigger++;
}
if(num[bigger] < num[x])
return ;
int temp = num[bigger];
num[bigger] = num[x];
num[x] = temp;
adjust(num,bigger,endd);
}
int main()
{
int n;
int *original;
int *particle;
int type = 2;
scanf("%d", &n);
original = new int[n];
particle = new int[n];
for(int i = 0; i < n; i++)
scanf("%d", original+i);
for(int i = 0; i < n; i++)
{
scanf("%d", particle+i);
if(i == 1)
{
if(particle[1] >= particle[0])
type = 1;
}
}
if(type == 1)
{
printf("Insertion Sort\n");
for(int i = 1; i < n; i++)
{
if(particle[i] < particle[i-1])
{
int temp = particle[i];
int j;
for(j = i-1; j >= 0 && particle[j] > temp; j--)
particle[j+1] = particle[j];
particle[j+1] = temp;
break;
}
}
}
else
{
printf("Heap Sort\n");
int temp;
int j;
for(j = n-1; j >= 0; j--)
{
if(particle[0] > particle[j])
{
temp = particle[0];
particle[0] = particle[j];
particle[j] = temp;
break;
}
}
int father;
int x = j-1;
int t;
while(x)
{
father = (x-1) / 2;
if(particle[father] < particle[x])
{
temp = particle[x];
particle[x] = particle[father];
particle[father] = temp;
adjust(particle, x, j-1);
}
x = father;
}
}
for(int i = 0; i < n; i++)
{
if(i == 0)
printf("%d", particle[i]);
else
printf(" %d", particle[i]);
}
return 0;
}