您的位置:首页 > 其它

1098. Insertion or Heap Sort

2016-06-09 17:11 357 查看
堆排序都快不会写了。。。加油啊。。。

#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
;
particle = new int
;

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: