#include "iostream"
using namespace std;
int data2[1000] = { 0 };
int data1[1000] = { 0 };
bool cmp(int a, int b) {
return abs(a) > abs(b);
}
void direct_insert_sort(int* a, int len) {
int i, j, temp;
for (i = 1; i < len; i++) {
if (a[i - 1] > a[i]) {
temp = a[i];
for (j = i - 1; j >= 0 && a[j] > temp; j--) {
a[j + 1] = a[j];
}
a[j + 1] = temp;
}
}
}
void heap_adjust(int* a, int i, int len) {
int j, temp;
temp = a[i];
for (j = 2 * i + 1; j < len; j = 2 * j + 1) {
if (j + 1 < len) {
if (a[j + 1] > a[j]) {
j++;
}
}
if (temp < a[j]) {
a[i] = a[j];
i = j;
}
else {
break;
}
}
a[i] = temp;
}
void build_max_heap(int* a, int len) {
for (int i = (len - 2) / 2; i >= 0; i--) {
heap_adjust(a, i, len);
}
}
void heap_sort(int a[], int len) {
int i, temp;
build_max_heap(a, len);
for (i = len - 1; i > 0; i--) {
temp = a[0];
a[0] = a[i];
a[i] = temp;
heap_adjust(a, 0, i);
}
}
int main(void)
{
for (int i = 0; i < 10; i++) {
data2[i] = rand() % 100;
data1[i] = data2[i];
}
for (int i = 0; i < 10; i++) {
cout << data2[i] << " ";
}
cout << endl;
direct_insert_sort(data1, 10);
for (int i = 0; i < 14; i++) {
cout << data1[i] << " ";
}
cout << endl;
heap_sort(data2, 10);
for (int i = 0; i < 14; i++) {
cout << data2[i] << " ";
}
return 0;
}
C++数据结构堆排序
于 2023-03-30 17:27:01 首次发布