算法模板题,又复习了一遍插排。。。
#include <cstdio>
#include <algorithm>
using namespace std;
int heap[110];
int before[110];
int mid[110];
int n;
void downAdjust(int low, int high){
int i = low;
int j = i * 2;
while(j <= high){
if(j+1<=high && heap[j+1]>heap[j]){
j = j + 1;
}
if(heap[j] > heap[i]){
swap(heap[j],heap[i]);
i = j;
j = i * 2;
}else{
break;
}
}
}
void createHeap(){
for(int i=n/2; i>=1; i--){
downAdjust(i, n);
}
}
bool isSame(int arr[]){
for(int i=1; i<=n; i++){
if(arr[i] != mid[i]) return false;
}
return true;
}
void heapSort(){
createHeap();
for(int i=n; i>1; i--){
swap(heap[1], heap[i]);
downAdjust(1, i-1);
if(isSame(heap)){
printf("Heap Sort\n");
swap(heap[1], heap[i-1]);
downAdjust(1, i-2);
for(int i=1; i<=n; i++){
printf("%d", heap[i]);
if(i != n) printf(" ");
}
return;
}
}
}
void insertSort(){
int temp;
int flag = 0;
for(int i=2; i<=n; i++){
temp = before[i];
int j = i;
while(j>1 && temp<before[j-1]){
before[j] = before[j-1];
j--;
}
before[j] = temp;
if(flag){
for(int i=1; i<=n; i++){
printf("%d", before[i]);
if(i != n) printf(" ");
}
return;
}
if(isSame(before)){
printf("Insertion Sort\n");
flag = 1;
}
}
}
int main(){
scanf("%d", &n);
for(int i=1; i<=n; i++){
scanf("%d", &heap[i]);
before[i] = heap[i];
}
for(int i=1; i<=n; i++){
scanf("%d", &mid[i]);
}
heapSort();
insertSort();
return 0;
}