1098 Insertion or Heap Sort (25 point(s))

题解

堆排序and插入排序。

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int n;
vector<int> a, b;
void dowajust(int i, int n) {
	int j = 2 * i;
	while(j <= n) {
		if(j + 1 <= n && b[j] < b[j + 1]) ++j;
		if(b[j] > b[i]) {
			swap(b[i], b[j]);
			i = j; j *= 2;
		}
		else break; 
	}
} 
int main() {
	scanf("%d", &n);
	a.resize(n + 1); b.resize(n + 1);
	for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
	for(int i = 1; i <= n; ++i) scanf("%d", &b[i]);
	int p = 2;
	while(p <= n && b[p - 1] <= b[p]) ++p;
	int m = p;
	while(p <= n && a[p] == b[p]) ++p;
	if(p == n + 1) {
		printf("Insertion Sort\n");
		sort(b.begin() + 1, b.begin() + m + 1);
	} else {
		printf("Heap Sort\n");
		p = n;
		while(p > 1 && b[p - 1] <= b[p]) --p;
		swap(b[1], b[p]);
		dowajust(1, p - 1);
	}
	for(int i = 1; i <= n; ++i) printf("%d%c", b[i],  i == n ? '\n' : ' ');
}

 

相关文章:

  • 2022-01-18
  • 2021-12-09
  • 2022-01-10
  • 2021-11-07
  • 2021-06-04
  • 2021-07-06
  • 2021-10-02
  • 2021-07-13
猜你喜欢
  • 2021-09-15
  • 2022-12-23
  • 2021-08-25
  • 2021-10-07
  • 2022-12-23
  • 2022-12-23
  • 2021-09-16
相关资源
相似解决方案